49得票8回答
Pthread互斥锁断言错误

我在一个基于Linux(ARM)的通信应用程序中时不时地遇到以下错误:pthread_mutex_lock.c:82: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed. 在谷歌上搜索这个错误会出现很多...

7得票2回答
一个在函数体内被静态定义的mutex能够正确地进行锁定吗?

在函数体中静态定义的互斥锁能够正常地进行锁定吗? 我目前正在我的日志记录系统中使用此模式,但尚未测试它的线程安全性。 void foo () { static std::mutex mu; std::lock_guard<std::mutex> guard(mu)...

21得票2回答
为什么std::mutex比std::atomic更快?

我想以多线程模式将对象放入std::vector中。因此,我决定比较两种方法:一种使用std::atomic,另一种使用std::mutex。我发现第二种方法比第一种方法更快。为什么? 我使用的是GCC 4.8.1,在我的机器上(8个线程),我发现第一种解决方案需要391502微秒,而第二种解...

15得票4回答
为什么在线程同步时要使用互斥锁而不是布尔变量?

我正在尝试理解C语言中的多线程编程。 我有一个疑问,既然我们使用MUTEXES进行线程同步,为什么不能使用布尔变量来阻塞代码的关键区域以便执行。 MUTEX与布尔变量相比有什么特别之处? PS:实际上这个问题是在一次面试中被问到的。请分享您对此的知识。

10得票4回答
为什么这个程序出现错误?“从未同步的代码块中调用了对象同步方法”。

这段代码有什么问题?出现了“从未同步的代码块中调用对象同步方法”的错误。我在Google上找到一个结果,说可能是在锁定之前释放了互斥体,但根据我的输出,这不是问题所在。以下是互斥体代码,没有其他代码介入。 -编辑-抱歉,错贴了内容。 我的输出 1W 1W 2W 代码 using S...

34得票7回答
互斥锁是否保证获取的顺序?解锁线程在其他线程还在等待时再次获取它。

最近,我们的一位同事在使用C++应用程序的两个线程时遇到了一个问题,归结为以下事件序列: 线程A拥有一个互斥锁。 当线程A持有该互斥锁时,线程B尝试锁定它。由于锁被持有,线程B被挂起。 线程A完成持有互斥锁的工作,从而释放互斥锁。 很快之后,线程A需要触及由互斥锁保护的资源,因此再次锁...

7得票1回答
对如何初始化和实现pthread互斥锁和条件变量感到困惑

我有些困惑如何初始化和实现pthread互斥锁和条件变量。该程序的目标是让生产者将一组整数放入队列中,消费者从队列中取出整数。我还必须能够定义要创建的生产者和消费者线程的数量。在初始代码中,我得到了这些: // Locks & Condition Variables pthread_...

7得票1回答
如何在标准C++11中创建shared_lock或upgrade_lock?

我从新标准中很想要的是std::shared_lock模板类。在Boost.Thread中有boost::shared_lock,甚至还存在boost::upgrade_lock。 为什么C++11中没有std::shared_lock和std::unique_lock呢? 如何在纯C++1...

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

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

7得票1回答
在分配的堆内存中,对于不同的偏移量是否需要互斥锁?

我正在为一个生成二进制数据表的工具搭建框架。计划使用多线程以充分利用我可用的24个核心。(我估计在单线程下生成数据的墙时将约为50天)。过去,我曾使用服务器/客户端设计和套接字通信来完成此任务,因为我需要将其分布在多台机器上。 这一次,我考虑采用单机/多线程方法,并试图找出正确的方法。 主...