43得票7回答
如何使用类似于std::vector<std::mutex>的东西?

我有许多对象,可能数量很大,这些对象正在并发写入。我想用互斥锁来保护对它们的访问。为此,我考虑使用std::vector&lt;std::mutex&gt;,但是这不起作用,因为std::mutex没有复制或移动构造函数,而std::vector::resize()需要它们。 有什么推荐的解...

43得票4回答
互斥锁是如何工作的?

互斥锁的理念是一次只允许一个线程访问某个内存区域。如果一个线程锁定了互斥锁,任何其他锁定尝试都会阻塞,直到第一个锁释放。然而,这是如何实现的?为了锁定自身,互斥锁必须在某处设置一个位,指示它已被锁定。但如果第二个互斥锁正在同时读取第一个写入的内容呢?更糟糕的是,如果它们两个同时锁定了互斥锁呢?...

42得票8回答
如何在互斥锁中给特权线程优先级?

首先声明:我完全是一个互斥量/多线程编程的新手,所以提前抱歉任何错误... 我有一个运行多个线程的程序。这些线程(通常每个CPU核心一个)进行大量的计算和“思考”,然后有时会决定调用一个特定的(共享的)方法来更新一些统计信息。 统计信息更新的并发性通过使用互斥锁来管理:stats_mutex....

40得票5回答
在Linux/UNIX上的多进程情况下是否可以使用互斥量?

这是一个面试问题。 在Linux/UNIX中,多进程的情况下可以使用互斥锁吗? 我的想法是: 不行,不同的进程有独立的内存空间。 互斥锁仅用于多线程。 信号量用于多进程进行同步。 对吗? 欢迎任何评论。 谢谢。

39得票4回答
互斥锁线程

我是多线程/进程编程的新手,这是我需要澄清的事情。 进程A的代码pthread_mutex_lock() pthread_create(fooAPI(sharedResource)) //fooAPI creates another thread with shared resour...

38得票5回答
C#中Mutex的用法

我在 C# 中的线程方面有点新手,我的程序中我正在使用mutex来允许只有1个线程进入关键部分,但由于某种未知原因,在进行一些打印时,我可以看到多个线程正在进入我的关键部分,这是我的代码:Mutex m = new Mutex(); m.WaitOne(); &lt;C.S&gt; // cr...

38得票5回答
我需要在读取对象时进行锁定吗?

我正在编写一个程序,其中有一个对象被多个线程共享: A)多个写线程向对象中写入数据(所有线程都运行相同的功能) B)一个读取线程每 5 秒钟访问该对象 C)一个读取线程在有用户请求时访问该对象 很显然,在向对象中写入内容时需要对其进行锁定,因为我们不希望多个线程同时写入该对象。 我的...

37得票4回答
使用std::lock(c++11)会导致巨大的CPU负载

我最近实现线程/互斥量管理器的努力导致CPU负载达到了75%(4核),而所有四个运行的线程都处于睡眠或等待互斥量被解锁状态。具体的类过于庞大,难以在此完全发布,但我可以将原因缩小到安全获取两个互斥量造成死锁。std::unique_lock&lt;std::mutex&gt; lock1( m...

36得票1回答
什么是future和shared_future的区别?

什么是future和shared_future的区别? 在什么情况下我们必须使用shared_future而不是future? 我试图找到对比C ++ 11中这两个特性的良好文档,但我在网上找不到一个答案(至少易于阅读)。 以下是我目前对它们之间差异的理解: future对象只能查询一...

35得票1回答
C++11中memory_order_acquire和memory_order_release的语义是什么?

http://en.cppreference.com/w/cpp/atomic/memory_order和其他C++11在线参考资料定义了memory_order_acquire和memory_order_release: Acquire操作:在此次加载之前,当前线程中没有读取可以被重新排...