Я разрабатываю приложение для OpenSUSE 12.1.Thread - синхронизация и спальная нить отказываются проснуться (LINUX)
Это приложение имеет основной поток и другие два потока, выполняющие экземпляры тех же функций. Я пытаюсь использовать pthread_barrier
синхронизировать все темы, но у меня возникают некоторые проблемы:
- Когда я помещал полученные нити, чтобы спать, они никогда не будут просыпаться по какой-то причине.
- (в случае, когда я удаляю сон из других потоков, бросая использование ЦП в небо). В какой-то момент все потоки достигают
pthread_barrier_wait()
, но ни одно из них не продолжает выполнение после этого.
Вот несколько псевдокодов, пытающихся проиллюстрировать, что я делаю.
pthread_barrier_t barrier;
int main(void)
{
pthread_barrier_init(&barrier, NULL , 3);
pthread_create(&thread_id1, NULL,&thread_func, (void*) ¶ms1);
pthread_create(&thread_id2v, NULL,&thread_func, (void*) ¶ms2);
while(1)
{
doSomeWork();
nanosleep(&t1, &t2);
pthread_barrier_wait(&barrier);
doSomeMoreWork();
}
}
void *thread_func(void *params)
{
init_thread(params);
while(1)
{
nanosleep(&t1, &t2);
doAnotherWork();
pthread_barrier_wait(&barrier);
}
}
Создать небольшой пример, который может быть скомпилирован, или после реального соответствующего кода. Псевдокод может не иметь ошибки/ошибки вашего реального кода. – nos
Правильно ли вы установили переменную t1? –
Да, он правильно установлен. –