我目前正在尝试将一个为 WIN32 编写的多线程库移植到 Android/Linux,我似乎在尝试映射 WIN32 互斥锁具有的特定功能时遇到了一些问题。
从 Windows 互斥对象的文档中:
其他进程中的线程可以通过在对 CreateMutex 的调用中指定对象名称来打开现有互斥对象的句柄。如果已存在同名的互斥对象,GetLastError 将返回 ERROR_ALREADY_EXISTS。
我无法在 Linux 手册页中找到与 Windows API 提供的内容类似的任何信息。
我问这个问题的主要原因是我移植的互斥体创建代码包含:
isCreator = !(::GetLastError() == ERROR_ALREADY_EXISTS);
其中isCreator
是布尔数据类型。(不确定它的用途,但我认为它很重要)。
编辑:
mutex = PTHREAD_MUTEX_INITIALIZER;
// attributes??
if (pthread_mutex_init(&mutex, NULL) != 0) {
throw Nv_EXCEPTION(XCPT_ResourceAllocationFailure, GetLastError());
}