dispatch_async () в c - PullRequest
       12

dispatch_async () в c

2 голосов
/ 20 сентября 2011

У меня проблемы с пониманием 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();

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Вопрос предполагает некоторую путаницу в отношении того, что на самом деле делает великая центральная диспетчеризация. Перестаньте думать о потоках или «параллелизме» как о какой-то общей цели и начните думать о том, какие операции должны быть синхронными, а какие - асинхронными, и вы (и многие из ответивших) начнете понимать, как это учитывать. должным образом. Прежде всего, ваши читатели должны быть синхронными, а ваши пишущие - асинхронными, каждое значение для чтения / записи должно иметь последовательную очередь, связанную с ним. То, как система затем распараллеливает это по отношению к другим последовательным очередям (или самим запросам на чтение / запись), - это не то, о чем вы должны или должны заботиться.

1 голос
/ 26 сентября 2011

Ваш код должен делать именно это, если я что-то упустил. Поскольку вы используете две разные очереди, они должны работать одновременно.

...