LINUX.ORG.RU

Синхронизация


0

0

Доброе время суток! В моей сишной проге есть несколько потоков (через vfork() и функция, которую они все время от времени используют. Проблема том, что надо, чтобы в один момент времени только один поток мог ее выполнять, т.е. когда один заратает в функции другие ждут. Как это сделать? Заранее благодарен. Ваш ответ спасет отца русской демократии. :)

anonymous

Используй семафор. Так как у тебя BSD, включи в ядро их поддержку. По моему это достигается с помощью SYSVSEM. Сам lock/unlock семафора лучше делать вне функции, потому как вызов функции не атомарен и в зависимости от того как далеко в функции ты расположишь lock, ты легко можешь изменить какой нибудь разделяемый ресурс. А лучше разберись с pthread'ами. Они намного портабельнее и больше отвечают духу времени. В этом случае используй mutex.

timur
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.