mutex相关内容

锁、互斥锁和信号量有什么区别?

我听说过这些与并发编程有关的词,但是锁、互斥体和信号量之间有什么区别? 解决方案 一个锁只允许一个线程进入被锁定的部分,并且该锁不与任何其他进程共享. 互斥锁与锁相同,但它可以是系统范围的(由多个进程共享). 信号量 与互斥锁的作用相同,但允许 x 个线程进入,例如可以使用限制同时运行的cpu、io或ram密集型任务的数量. 有关互斥锁和信号量之间差异的更详细帖子,请阅读 ..
发布时间:2021-12-28 22:30:11 其他开发

Boost 中的多读者、单作者锁定

我正在尝试在多线程场景中实现以下代码: 获取互斥锁的共享访问权限读取数据结构如有必要:获得对互斥锁的独占访问权更新数据结构释放排他锁释放共享锁 Boost 线程有一个 shared_mutex 类,它是为多读取器、单写入器模型设计的.有几个关于这个类的 stackoverflow 问题.但是,我不确定它是否适合上述任何 读者都可能成为作家的场景.文档指出: UpgradeLockable ..
发布时间:2021-12-24 15:23:03 C/C++开发

C++11 等价于 boost shared_mutex

是否有与 boost::shared_mutex 等效的 C++11.或者在 C++11 中处理多读取器/单写入器情况的另一种解决方案? 解决方案 我尝试过但未能将 shared_mutex 导入 C++11.它已被提议作为未来的标准.该提案位于此处.> 编辑:修订版 (N3659) 是接受 C++14. 这是一个实现: http://howardhinnant.github ..
发布时间:2021-12-24 15:05:15 C/C++开发

我如何使用 std::vector<std::mutex> 之类的东西?

我有大量但可能不同的对象同时写入.我想用互斥锁保护该访问.为此,我以为我使用了 std::vector,但这不起作用,因为 std::mutex 没有副本或移动构造函数,而 std::vector::resize() 需要. 这个难题的推荐解决方案是什么? 编辑:所有 C++ 随机访问容器都需要复制或移动构造函数来重新调整大小吗?std::deque 有帮助吗? 再次编辑 ..
发布时间:2021-12-21 13:29:26 C/C++开发

使用 imageAtomicCompSwap 的 GLSL 每像素自旋锁

OpenGL 红皮书版本 9 (OpenGL 4.5) 示例 11.13 是简单的每像素互斥.它在 do {} while() 循环中使用 imageAtomicCompSwap 来获取每个像素的锁,以防止在对应于同一像素的像素着色器调用之间同时访问共享资源坐标. layout (binding = 0, r32ui) 统一 volatile 相干 uimage2D lock_image;无效主 ..
发布时间:2021-12-19 17:50:12 其他开发

pthread_mutex_lock 是如何实现的

我只是想知道在 Unix 中如何实现与线程之间的同步相关的功能.例如,当我调用 pthread_mutex_lock 时会发生什么?是否有任何使用中的指针?参考源代码真的很有帮助. 解决方案 它既复杂又因 Unix 变体而异. 例如,在 Linux 中,使用了一个名为 Futex(Short for Fast Userspace Mutex)的系统. 在该系统中,对用户空间中的 ..
发布时间:2021-12-15 00:08:43 服务器开发

PTHREAD_MUTEX_INITIALIZER 与 pthread_mutex_init ( &mutex, param)

和 有什么区别吗 pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 或 pthread_mutex_t 锁;pthread_mutex_init ( &lock, NULL); 如果我只使用第一种方法,我就足够安全了吗? 注意:我的问题主要是针对非常小的程序,其中我最多要做的是将多个客户端连接到服务器并使用工作线程解决它们的查询. ..
发布时间:2021-12-12 12:52:45 其他开发

在 for 循环中使用指针

我正在努力理解为什么我的代码在一种状态下有错误,而在另一种状态下没有.我已经有一段时间没有介绍指针了,所以我可能生疏了! 基本上,我有一个存储库结构,用于在内存中存储对象,该结构具有 Store 功能. type chartsRepository struct {mtx 同步.RWMutex图表地图[图表名称]*图表}func (r *chartsRepository) Store(c * ..
发布时间:2021-12-11 12:20:14 其他开发

并发访问映射

在并发访问的程序中使用映射时,是否需要在函数中使用互斥锁来读取值? 解决方案 多个读者,没有作者也可以: https://groups.google.com/d/msg/golang-nuts/HpLWnGTp-n8/hyUYmnWJqiQJ 一个作家,没有读者是可以的.(否则地图就不太好用了.) 否则,如果至少有一个写入者和至少一个写入者或读取者,则所有读取者和写入者必 ..
发布时间:2021-12-10 16:32:29 其他开发

如何强制我的应用程序只打开一个 exe?qt, linux

我希望我的应用程序只打开一个进程,即如果一个进程已经打开并且用户想再次打开 exe - 它不会打开另一个进程. 我如何在 Qt - linux 中做到这一点? 10 倍! 解决方案 您正在寻找的是 QtSingleApplication. 如果您启动应用程序的另一个实例,第一个实例甚至会收到通知(您可以传递您想要的任何数据结构). 每当另一个实例启动时,我都会使用它 ..
发布时间:2021-12-09 17:07:51 服务器开发

用 c++11 等价物替换 boost::thread 和 boost::mutex 是否明智?

动机:我之所以考虑它是因为我的天才项目经理认为 boost 是另一种依赖,而且它很可怕,因为“你依赖它"(我尝试解释 boost 的质量,然后在一段时间后放弃了时间 :( ). 我想做它的较小原因是我想学习 c++11 特性,因为人们会开始在其中编写代码.所以: #include 之间是否存在 1:1 映射?#include 和提升等价物? 你认为用 c++11 替换 boost 的东西是 ..
发布时间:2021-12-06 11:57:36 C/C++开发

并发散列集在 .NET 框架中?

我有以下课程. class 测试{公共哈希集Data = new HashSet();} 我需要更改来自不同线程的“数据"字段,因此我想对我当前的线程安全实现提出一些意见. class 测试{公共哈希集Data = new HashSet();公共无效添加(字符串值){锁(数据)数据.添加(瓦尔);}公共无效删除(字符串 Val){锁(数据)数据.删除(瓦尔);}} 是否有更好的解决方案, ..
发布时间:2021-12-06 11:27:55 C#/.NET

什么是互斥锁?

互斥锁是一种经常用于解决多线程问题的编程概念.我对社区的问题: 什么是互斥量以及如何使用它? 解决方案 当我在工作中进行激烈的讨论时,我会使用放在办公桌上的橡皮鸡.拿着鸡的人是唯一被允许说话的人.如果你不拿着鸡,你就不能说话.你只能表明你想要鸡肉,等到你得到它再说话.一旦你说完,你可以把鸡交还给主持人,主持人将把它交给下一个发言的人.这样可以确保人们不会互相争吵,也有自己的谈话空间. ..
发布时间:2021-12-06 11:23:28 其他开发

boost shared_mutex 的示例(多次读取/一次写入)?

我有一个多线程应用程序,它必须经常读取一些数据,并且偶尔会更新这些数据.现在互斥锁可以安全地访问该数据,但它很昂贵,因为我希望多个线程能够同时读取,并且仅在需要更新时将它们锁定(更新线程可以等待其他线程完成). 我认为这是 boost::shared_mutex 应该做的,但我不清楚如何使用它,也没有找到一个明确的例子. 有没有人有一个简单的例子可以让我开始使用? 解决方案 看 ..
发布时间:2021-12-06 11:14:43 C/C++开发

什么时候应该使用互斥量,什么时候应该使用信号量

什么时候应该使用互斥锁,什么时候应该使用信号量? 解决方案 这里是我记得什么时候用什么 - 信号量:当您(线程)想睡觉直到其他线程告诉您醒来时,请使用信号量.信号量“向下"发生在一个线程(生产者)中,而信号量“向上"(对于同一个信号量)发生在另一个线程(消费者)中例如:在生产者-消费者问题中,生产者想要休眠直到至少一个缓冲槽为空——只有消费者线程可以判断缓冲槽何时为空. 互斥: ..
发布时间:2021-12-03 13:44:25 服务器开发

创建单实例 WPF 应用程序的正确方法是什么?

在 .NET 下使用 C# 和 WPF(而不是 Windows Forms 或控制台),什么是创建只能作为单个实例运行的应用程序的正确方法是什么? 我知道它与某种叫做互斥锁的神秘事物有关,我很少能找到有人费心停下来解释其中一个是什么. 代码还需要通知已经运行的实例,用户试图启动第二个实例,并且可能还传递任何存在的命令行参数. 解决方案 这里有一篇很好的文章 关于 Mutex 解 ..
发布时间:2021-12-01 09:02:22 C#/.NET

CUDA、互斥锁和 atomicCAS()

最近我开始在 CUDA 上开发并面临 atomicCAS() 的问题.要对设备代码中的内存进行一些操作,我必须创建一个互斥锁,以便只有一个线程可以在代码的关键部分使用内存. 下面的设备代码在 1 个块和多个线程上运行. __global__ void cudaKernelGenerateRandomGraph(..., int* mutex){int i = threadIdx.x;... ..
发布时间:2021-11-30 14:53:27 C/C++开发

哪个更有效,基本互斥锁或原子整数?

对于像计数器这样简单的东西,如果多个线程将增加数量.我读到互斥锁会降低效率,因为线程必须等待.所以,对我来说,原子计数器是最有效的,但我在内部读到它基本上是一个锁?所以我想我很困惑如何才能比另一个更有效率. 解决方案 原子操作利用处理器支持(比较和交换指令)并且根本不使用锁,而锁更依赖于操作系统并且执行不同,例如例如,Win 和 Linux. 锁实际上会暂停线程执行,为其他任务释放 ..
发布时间:2021-11-30 14:50:26 其他开发

提升互斥量 C++/CLI 问题

我正在 Visual Studio 2008 C# 中开发 64 位,我想使用一个使用 boost 的库.所以我用 C++/CLI 写了一个包装器.我设法针对我遇到的错误 #include . 如果我在 C++/CLI 包装器中包含任何本身包含 的文件,或者如果我直接将它包含在包装器中,我会得到一个“System.AccessViolation ..
发布时间:2021-11-26 14:56:38 其他开发