Linux下关于互斥锁及同步的移植
Linux下关于互斥锁及同步的移植
将Win32程序关于多线程的内容移植到Linux下面,不能简单的按照函数对应来移植。不过通过下面的对应关系,再加上你对这些模式的深入了解,相信会移植的很成功。
信号量
Windows 信号量是一些计数器变量,允许有限个线程/进程访问共享资源。Linux POSIX 信号量也是一些计数器变量,可以用来在 Linux 上实现 Windows 上的信号量功能。
信号量的类型: Windows 提供了有名(named)信号量和无名(unnamed)信号量。有名信号量可以在进程之间进行同步。在 Linux 上,在相同进程的不同线程之间,则只使用 POSIX 信号量。在进程之间,可以使用 System V 信号量。
等待函数中的超时: 当在一个等待函数中使用时,可以为 Windows 信号量对象指定超时值。在 Linux 中,并没有提供这种功能,只能通过应用程序逻辑处理超时的问题。
创建信号量
在 Windows 中,可以使用 CreateSemaphore() 创建或打开一个有名或无名的信号量。
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);
在这段代码中:
lpSemaphoreAttributes 是一个指向安全性属性的指针。如果这个指针为空,那么这个信号量就不能被继承。
lInitialCount 是该信号量的初始值。
lMaximumCount 是该信号量的最大值,该值必须大于 0。
lpName 是信号量的名称。如果该值为 NULL,那么这个信号量就只能在相同进程的不同线程之间共享。否则,就可以在不同的进程之间进行共享。
|
评论暂时关闭