Linux中与Win32等效的同步原语

时间:2016-04-07 11:56:12

标签: linux winapi porting

我正在为Windows编写一个代码(由我编写)到其他平台。

我有一个用于单线程协作式多任务的通用基础架构,我尝试使用POSIX API使其工作。此基础结构允许等待任何指定的“事件”并适当地处理它们中的任何一个。这些“事件”包括网络(套接字),定时器和应用程序本身从另一个线程引起的事情,例如关于应在此线程中执行的排队工作项的“事件”,中止请求等。

在Windows中,自然的方法是使用“等待句柄”(事件,信号量等)和WaitForMultipleObjects或等效的等待函数。套接字也可以与事件相关联(WSAEventSelect)。

我想知道如何使用POSIX实现这一目标。我需要的是一种等待函数,可以给出多个等待的事件/条件,包括超时。

由于我需要(除其他外)套接字,我决定从文件/套接字特定的等待函数开始,例如selectpollepoll。这可以解决问题。

现在我想知道如何添加“内部”事件。我想到的一个解决方案是通过socketpair为此创建“人工”套接字,然后发送“虚拟数据”以在目标线程中引发事件。

然而,这似乎有点矫枉过正,无效。创建套接字似乎是一个复杂的操作。而我唯一需要的是“唤醒”一个线程。

有什么想法吗?

0 个答案:

没有答案