Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > синхронизация потоков pthread


Автор: jnb 27.2.2007, 18:09
Помогите в юниксе (FreeBSD) реализовать следующую логику:
Есть два потока. 
Один из них находится в ожидании события, которое может сгенерировать второй поток.
После этого он пробуждается, выполняет действия и опять переходит в ожидание этого же события.

В винде это я реализовал бы через event и WaitForSingeObject.
А как это сделать в юниксе с помощью pthread библиотеки?




Автор: MAKCim 27.2.2007, 18:35
pthread_cond_wait() / pthread_cond_signal()
man pthread

Автор: jnb 27.2.2007, 18:56
Спасибо.
Просто думал есть другие, более простые способы.
А то эти сигнальные переменные какие-то слишком запутанные.
Пришлось читать - разобрался. smile 


Автор: azesmcar 28.2.2007, 14:28
pthread_join не подходит?

Добавлено @ 14:29 
ааа..извиняюсь...не дочитал вопрос smile человек просил аналог WaitForSingleObject я думал ему просто нужно подождать пока поток завершится..

Автор: Ken 1.4.2007, 00:26
Цитата(jnb @ 27.2.2007,  18:56)
Спасибо.
Просто думал есть другие, более простые способы.
А то эти сигнальные переменные какие-то слишком запутанные.
Пришлось читать - разобрался. smile

Есть: sem_init, sem_wait, sem_post, sem_destroy.

Автор: MAKCim 1.4.2007, 08:54
Ken
человек использует потоки, а не процессы
а все, что ты написал - это POSIX IPC

Автор: Ken 1.4.2007, 10:24
Цитата(MAKCim @ 1.4.2007,  08:54)
Ken
человек использует потоки, а не процессы
а все, что ты написал - это POSIX IPC

Он хотел аналог объекта события для потоков, а это очень легко реализуется на POSIX семафорах, которые предназначены как раз для синхронизации потоков. Надо создать семафор со значением 0 (sem_init). Поток ждущий событие "спит" на этом семафоре (sem_wait). Поток который посылает сигнал инкрементирует семафор (sem_post). Гораздо нагляднее и проще чем cond variables. А это отрывок из man pages:

/*
       This manual page documents POSIX 1003.1b semaphores, not to be confused with SystemV
       semaphores as described in !ipc!(5), !semctl!(2) and !semop!(2).

       Semaphores  are  counters for resources shared between threads. The basic operations
       on semaphores are: increment the counter atomically, and wait until the  counter  is
       non-null and decrement it atomically.
*/


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)