В общем задача стоит в синхронизации 2х потоков: 1й поток ожидает данные из очереди (не занимая cpu), а 2ой их постоянно генерирует и пихает в очередь не дожидаясь, пока 1й их обработает. Решил использовать для этого семафоры.
Можно ли функции семафоров sem_post и sem_wait использовать в разных потоках: sem_post вызвается только в 1ом треде, а sem_wait в 2м?
Например (язык C):
//внутри 1ого потока
void *thread1_run(void* _a)
{
...
for(;;) {
//ждем события от другого треда
sem_wait(&s);
//дождались, выполняем код
_data = popData();
//тут данные обрабатываем, причем намного медленнее, чем они формируются
...
}
...
}
//внутри 2ого потока
void *thread2_run(void *_b)
{
...
for(;;) {
//тут формируем данные
...
pushData(data);
sem_post(&s);
}
...
}