【发布时间】:2017-08-11 05:25:31
【问题描述】:
我在 iOS 开发者职位的面试中被问到这个问题。
// Please design a read-write task queue where you can tag the reader task with label,
// where the the task with the same label should be executed sequentially, and the
// tasks with different labels could be executed concurrently. However, the writer
// would get the exclusive access where no concurrent task would happen at the
// same time with the writer task
// For example:
protocol ConcurrentQueueWithSerialization {
// Submits a labeled task.
// All tasks with the same label will be serialized.
// Tasks with different labels will run concurrently.
// Use this method to submit a "read" operation from a particular reader.
func async(with label: String, task: @escaping () -> Void)
// Submits a task that will run concurrently with all other tasks regardless of their labels.
func async(task: @escaping () -> Void)
// Submits a labeled and delayed task.
func asyncAfter(deadline: DispatchTime, with label: String, task: @escaping () -> Void)
// Submits an unlabeled and delayed task.
func asyncAfter(deadline: DispatchTime, task: @escaping () -> Void)
// Submits a barrier task. Only one barrier task is allowed to run at a time.
// Works as a critical section for the queue.
// Use this method to submit a writer task.
func asyncBarrier(task: @escaping () -> Void)
}
class MyDispatchQueue: ConcurrentQueueWithSerialization {
//TODO: write your implementation
}
面试官要求我在 MyDispatchQueue 类中实现上述协议。我试过但找不到解决方案。请帮我。提前致谢。
【问题讨论】:
-
SO 不是代码编写服务。你试过什么?你遇到了什么问题?
-
您的问题仅包含要求 - 它并未显示您为自己解决此问题所做的任何努力。请在此问题中添加您的尝试 - 因为该站点不是免费的“我们为您提供(家庭)工作”服务。除此之外:请转至help center 了解如何/在这里问什么。谢谢!
标签: ios swift multithreading protocols