Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> синхронизация потоков pthread, аналог WaitForSingleObject 
:(
    Опции темы
jnb
Дата 27.2.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 4.10.2006

Репутация: нет
Всего: 1



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

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




PM MAIL   Вверх
MAKCim
Дата 27.2.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



pthread_cond_wait() / pthread_cond_signal()
man pthread


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
jnb
Дата 27.2.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 4.10.2006

Репутация: нет
Всего: 1



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


PM MAIL   Вверх
azesmcar
Дата 28.2.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



pthread_join не подходит?

Добавлено @ 14:29 
ааа..извиняюсь...не дочитал вопрос smile человек просил аналог WaitForSingleObject я думал ему просто нужно подождать пока поток завершится..
PM   Вверх
Ken
Дата 1.4.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 31.3.2007

Репутация: нет
Всего: 4



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

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

PM MAIL   Вверх
MAKCim
Дата 1.4.2007, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



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


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ken
Дата 1.4.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 31.3.2007

Репутация: нет
Всего: 4



Цитата(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.
*/


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1415 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.