linux中的条件变量,Linux中使用条件变量执行Windows事件?

我正在尝试在Linux中实现非常简单的Windows事件。仅针对我的情况-3个线程,1个主线程和2个辅助线程。每个辅助线程通过SetEvent引发1个事件,主线程等待它。例:

int main()

{

void* Events[2];

Events[0] = CreateEvent();

Events[1] = CreateEvent();

pthread_start(Thread, Events[0]);

pthread_start(Thread, Events[1]);

WaitForMultipleObjects(2, Events, 30000) // 30 seconds timeout

return 0;

}

int* thread(void* Event)

{

// Do something

SetEvent(Event);

// Do something

}

因此,要实现它,我使用条件变量。但是我的问题是-这是正确的方法吗?还是我做错了什么?我的实现:

// Actually, this function return pointer to struct with mutex and cond

// here i just simplified example

void* CreateEvent(mutex, condition)

{

pthread_mutex_init(mutex, NULL);

pthread_cond_init(condition, NULL);

}

bool SetEvent (mutex, condition)

{

pthread_mutex_lock(mutex);

pthread_cond_signal(condition);

pthread_mutex_unlock(mutex);

}

int WaitForSingleObject(mutex, condition, timeout)

{

pthread_mutex_lock(mutex);

pthread_cond_timedwait(condition, mutex, timeout);

pthread_mutex_unlock(mutex);

}

// Call WaitForSingleObject for each event.

// Yes, i know, that its a wrong way, but it should work in my example.

int WaitForMultipleObjects(count, mutex[], condition[], timeout);

一切似乎都很好,但是我认为,当我在辅助线程中的SetEvent被调用之前,在主线程中调用WaitFor

..函数时,将出现该问题。在Windows中,它运作良好,但在Linux中,上面仅描述了想法。

也许您告诉我解决这个问题的更好方法?谢谢。

UPD: 超时非常重要,因为辅助线程之一可能无法传递SetEvent()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值