在linux上的C/C++中,我如何创建一个预锁定的互斥对象
In C/C++ on linux, how do I create a prelocked mutex
我使用什么属性来创建pthreads互斥体,该互斥体在创建时被创建线程锁定?
pthreads互斥接口似乎不支持它。您必须相互锁定它,并使用其他一些同步方法来防止其他线程在您这样做之前抓取它(我假设您想在这里这样做),在下面的半伪代码中:
pthread_mutex_lock(my_pthread_creation_mutex);
pthread_mutex_init(new_mutex, mutex_attributes);
pthread_mutex_lock(new_mutex);
pthread_mutex_unlock(my_pthread_creation_mutex);
使用信号量是最接近您想要的。它们可以使用特定值进行初始化。在linux上(正如您有这个标签一样)man sem_overview
应该会很好地介绍这个主题
在锁定状态下创建的互斥体和创建它的线程创建并随后锁定的互斥体之间没有明显的区别
pthread_mutex_init(&mutex, &prelocked_attr);
/* done */
与
pthread_mutex_init(&mutex, 0);
pthread_mutex_lock(&done);
/* done */
在这两种情况下,在创建线程到达"完成"注释之前,任何其他线程都可以尝试以任何方式访问互斥体,并随后执行一些可以让其他线程知道互斥体存在的操作。
事实上,您认为您需要一个预先锁定的互斥体,这向我强烈地暗示了您试图做一些非常非常错误的事情,并且可能调用了未定义的行为。
你不能。如果你需要这样做,你必须在允许其他线程访问它之前锁定它。无论如何,你都必须这样做,以防止其他线程在初始化完成之前访问它。
相关文章:
- 如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
- 有没有办法让我编写一个可以在Windows和Linux上运行的命令行游戏?
- 我在使用 boost::serialization 时遇到了一个问题,我的代码在 Linux 中运行良好,但在 Wind
- 一个32位版本的应用程序,建立在CentOS 6 x64上,当在较新的Linux上启动时,在"dl_itera
- 如何在打开另一个图像时关闭图像 - linux c ++
- 如何交叉编译一个在 Linux for Linux 和 Linux for Windows 中编译的程序?
- 在 Ubuntu(linux OS)中将一个巨大的文件读入C++向量
- 如何在 C++ 中创建一个适用于 Windwos 和 Linux 的文件夹(目录)
- 您如何将所有链接依赖项都包装到一个Linux静态库中
- 调试从 Linux 中的另一个C++应用程序启动的 python 脚本
- 在 Linux 上编译一个 c++ 应用程序,并在 TI TIVA TM4C123GH6PM上刷新它
- 如何设置一个"precise"的定期计时器来监控Linux(C / C++)中的内容?
- 如何检测和与Linux下的另一个过程进行通信
- C++ 将目录复制到另一个目录(Linux cp 命令)
- 一个C++编译器是为不同的平台(Linux,Windows等)多次编写的,这是真的吗?
- 在 Linux 下的 Qt,如何检测一个进程已经在运行
- 如何使用C/C 系统调用来获取Linux过程中一个过程的当前大小
- Linux/GCC:是否有一种方法可以检查构建是否与其他机器上的前一个机器相同
- 是否对在另一个Linux发行版中使用G 编译的可执行文件有限制
- 杀死一个Linux进程,停止它在Oracle数据库中的查询工作吗?