The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Подскажите Аналог WaitForSingleObject(hThread,0)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от deadka email(ok) on 19-Мрт-08, 00:42 
Здравствуй, Всемогущий all!
Пишу с использованием Posix threads. Проблема в следующем - в моем приложении основной поток создает дополнительный поток, и ему (основному потоку) иногда нужно проверять - а не закончил ли еще дополнительный поток свою работу?, но чтобы при этом основной поток не останавливал свою работу, то есть pthread_join, увы не подходит. В windows-программировании эту проблему легко решить с помощью вызова WaitForSingleObject(hAdditionalThread,0) - а как это можно сделать в Unix?, и по возможности posix-ными функциями (вроде pthread_tryjoin_np годится, но она непосиксовая :( )?

Подскажите кто знает пожалуйста - ибо решение в виде заведения атомарной или защищенной mutex'ом переменной для статуса потока и последующая работа через нее все же абсолютно не прельщает.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от Wulf (ok) on 19-Мрт-08, 02:03 
>Подскажите кто знает пожалуйста - ибо решение в виде заведения атомарной или
>защищенной mutex'ом переменной для статуса потока и последующая работа через нее
>все же абсолютно не прельщает.

если один поток только пишет, а другой только читает, переменную статуса можно сделать просто int. ее запись и чтение будут атомарными и без мутексов. Только, вероятно, нужно volatile добавить, чтоб компилятор лишнего не соптимизировал.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от Wulf (ok) on 19-Мрт-08, 02:05 
если один поток только пишет, а другой только читает - это про переменную статуса
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от deadka email(??) on 19-Мрт-08, 11:34 
>если один поток только пишет, а другой только читает - это про
>переменную статуса

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от Wulf (??) on 19-Мрт-08, 12:08 
>>если один поток только пишет, а другой только читает - это про
>>переменную статуса
>
>Спасибо за совет. Писать оба будут, но это не столь уж и
>важно в данном случае - непонятно как определить - а работает
>ли дополнительный поток, не прерывая при этом работу основного

я неправильно выразился. Если один активный поток только устанавливает значение переменной статуса, а другой(другие) ожидающие только используют эти значения и не изменяют, то операции над переменной статуса будут атомарными и без мутексов. По крайней мере, это верно для типа int. Т.е. вам нужно выставить статус в активный перед созданием дополнительного потока и сбросить перед выходом. а в основном просто периодически проверять и все это делать БЕЗ мутексов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от deadka email(??) on 19-Мрт-08, 12:23 
>[оверквотинг удален]
>>важно в данном случае - непонятно как определить - а работает
>>ли дополнительный поток, не прерывая при этом работу основного
>
>я неправильно выразился. Если один активный поток только устанавливает значение переменной статуса,
>а другой(другие) ожидающие только используют эти значения и не изменяют, то
>операции над переменной статуса будут атомарными и без мутексов. По крайней
>мере, это верно для типа int. Т.е. вам нужно выставить статус
>в активный перед созданием дополнительного потока и сбросить перед выходом. а
>в основном просто периодически проверять и все это делать БЕЗ мутексов.
>

Спасибо большое за ответ, идею понял. Можно еще atomic'ами вроде, но они не posix :(.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от Wulf (??) on 19-Мрт-08, 14:02 

>Можно еще atomic'ами вроде, но они не posix :(.

atomic-и понадобятся если захочется сделать инкремент, сложение, обмен, обмен с проверкой и т.п. операции, т.е. которые при компиляции в C имеют шансы разложится на чтение в одной инструкции, запись в другой и race window посередине. просто независимое чтение и независимая запись int-а всегда выполняется в 1 инструкцию и поэтому атомарно без применения специальных функций.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Подскажите Аналог WaitForSingleObject(hThread,0)"  
Сообщение от dronord (ok) on 20-Мрт-08, 11:00 
Кому-то я уже здесь рассказывал, pthread_kill(tid, 0);
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру