我在理解GCD时遇到了问题。我需要使用dispatch_async来生成函数put_values(),它将在无限循环中将值放入缓冲区。 Get_values()将在无限循环中删除。因此,我必须在没有命令的情况下同时运行它们,看看我是否实现了我的信号量以便正确等待。以下代码执行此操作(异步运行它们 )? 谢谢!
dispatch_queue_t producer = dispatch_queue_create("producer", NULL);
dispatch_queue_t consumer = dispatch_queue_create("consumer", NULL);
dispatch_async(producer,
^{
put_values();
});
dispatch_async(consumer,
^{
get_values();
});
dispatch_main();
答案 0 :(得分:1)
你的代码应该做到这一点,除非我遗漏了什么。因为您使用两个不同的队列,所以它们应该同时运行。
答案 1 :(得分:1)
这个问题表明对中央调度实际上做了什么感到困惑。不再考虑线程或“并发”作为一些重要的目标,而是开始考虑哪些操作需要同步,哪些操作可以是异步的,而你(以及许多回答过的人)将开始理解如何将这一点考虑在内正常。首先,您的读者应该是同步的,并且您的编写者应该是异步的,每个读取/写入的值都有一个与之关联的串行队列。系统如何将其与其他串行队列(或读/写请求本身)并行化,这不是您应该或需要关注的事情。