LINUX.ORG.RU

Как правильно синхронизировать потоки?


0

0

Задача стоит такая: нужно, чтобы поток Б (обработка информации) дождался поток А (UI), какие для этого есть средства И насколько вообще это корректная задача (может при правильном дизайне таких проблем вставать не должно?)? Я придумал два способа - первый, закомментированный - вечный цикл, пока второй поток не присвоит sleep false. Второй - такая система блокировок. Первый способ жрет процессор почем зря, оба выглядят нехорошо. Что посоветуете? Или я не знаю что-то стандартного на этот случай?

pthread_mutex_t lock;
bool sleep = false;

extern "C" void resume()
{
pthread_mutex_unlock(&lock);
//sleep = false;
}

extern "C" void suspend()
{
//sleep = true;
//while (sleep);
pthread_mutex_lock(&lock);
pthread_mutex_lock(&lock);
pthread_mutex_unlock(&lock);
}

★★

Condition Variable (man pthread_cond_init)

nozh
()

> Задача стоит такая: нужно, чтобы поток Б (обработка информации) дождался поток А (UI), какие для этого есть средства

Посмотри в сторону переменных состояния (condition variables, man pthread_cond_init) и барьеров (barriers, man pthread_barrier_init).

> закомментированный - вечный цикл, пока второй поток не присвоит sleep false.


В общем случае никто не гарантирует, что присвоение атомарно. Никогда так не делай.

> Второй - такая система блокировок.


У меня голова сейчас не соображает, но ИМХО такое вообще не будет работать. А если и будет - то далеко не всегда как ожидается.

Deleted
()

Точно, спасибо всем Condition Variables

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