草庐IT

pthread_mutex_lock

全部标签

c++ - boost::mutex 和 boost::timed_mutex 的区别

根据Boost文档,boost::mutex和boost::timed_mutex应该是不同的。第一个实现了LockableConcept,第二个实现了TimedLockableConcept。但是如果你看一下源代码,你会发现它们基本上是一样的。唯一的区别是锁类型定义。您可以在boost::mutex上调用timed_lock或使用带超时的boost::unique_lock。typedef::boost::detail::basic_timed_mutexunderlying_mutex;classmutex:public::boost::detail::underlying_mut

c++ - boost::lock 在 boost 1.53 中无法编译

我正在编译一个项目。它有以下几行:boost::mutex::scoped_lockml(m_meta_mut,boost::defer_lock);boost::mutex::scoped_locktl(m_tables_mut,boost::defer_lock);boost::lock(ml,tl);我在第三行收到lockisnotamemberofboost。我用的是boost1.53(项目推荐1.49)问题是什么 最佳答案 将我的评论变成更完整的答案。boost::lock()功能是definedinboost/threa

c++ - 为什么 C++14 中没有 shared_mutex 或 recursive_shared mutex?

在C++11中,您有mutex、timed_mutex和recursive_mutex。C++14添加了shared_timed_mutex。为什么没有shared_mutex或shared_recursive_mutex是有原因的? 最佳答案 它是在N3995:Aproposaltoaddshared_mutex(untimed)(Revision2)中提出的引用:AttheIssaquahISOC++meetingof2014shared_mutexwasrenamedtoshared_timed_mutexperproposa

c++ - __POSIX_VISIBLE 正在破坏我在 cygwin 上的 pthreading

我正在编译一个在cygwin上使用pthreads和gcc(完全是g++)的项目。鉴于我一直是如何在linux上开发它的,我从来没有遇到过任何问题。但现在,我无法编译使用某些pthread函数的代码,编译器提示这些函数未声明。我意识到我的工具链g++(GCC)5.4.0附带的pthread.h已使用保护部分#if__POSIX_VISIBLE>=200112这些阻止函数在cygwin/windows上可用。我尝试搜索“__POSIX_VISIBLE”,但没有找到真正有用的信息。这实际上是做什么的,为什么?我认为这只是pthread的某些部分不能在Windows上工作,或者在cygwin

c++ - Reader Writer Lock 支持低优先级的写者

我正在尝试寻找(或实现)支持低优先级写入器的读取器/写入器锁,但未能成功研究任何现有解决方案。我所说的低优先级写入器的意思是:“将让位给即将到来的读者或普通写入器”。如果有持续不断的读者流,肯定会导致饥饿,但这可以通过定时锁变体(“尝试定时低优先级写入器锁”,然后在超时时切换到正常锁)或通过更改来解决读取器的发布方式(可能会定期暂停读取一小段时间)。如果有任何文献描述这些东西,我还没有找到。如果有利用常规锁的已知(正确!)解决方案,我将不胜感激。 最佳答案 我不知道有什么100%像你的建议,但有一些现有的接口(interface)很

c++ - 将 pthreads 与 CUDA 结合使用 - 设计问题

我正在编写一些需要一些磁盘I/O的代码,并调用我编写的库来执行一些计算和GPU工作,然后调用更多磁盘I/O将结果写回文件。我想将其创建为多线程代码,因为文件非常大。我希望能够读取文件的一部分,将其发送到GPU库,然后将一部分写回文件。涉及的磁盘I/O非常大(如10GB),并且在GPU上的计算速度相当快。我的问题更像是一个设计问题。我应该使用单独的线程来预加载进入GPU库的数据,并且只让主线程实际执行对GPU库的调用,然后将结果数据发送到其他线程以写回磁盘,或者我是否应该继续让所有单独的线程各自完成自己的工作-获取一大块数据,在GPU上执行,然后写入磁盘,然后获取下一block数据?我正

c++ - pthread广播然后等待?

我正在尝试设置多个线程处于等待状态,直到它们收到pthread_cond_broadcast()。完成一项工作后,我希望线程回到它们的等待状态。我还希望调用pthread_cond_broadcast()的进程在继续之前等待所有线程返回到它们的等待状态。在这种情况下,调用广播的是main()函数。我正在尝试让main(0在调用广播后执行pthread_cond_wait()。void*Work::job(void*id){intidx=(long)id;while(1){pthread_mutex_lock(&job_lock);while(!jobs_complete){//wait

C++ std lib <mutex>, <conditional_variable> 库和共享内存

如果您想在共享内存中的进程之间共享互斥体,POSIX线程的CAPI需要设置一个特殊标志-请参阅sem_init()。我真的不知道差异是什么,但我在尝试在共享内存中使用C++std::condition_variable时遇到了问题——它的段错误。我在C++文档或构造函数中看不到任何提及此内容的内容。我想知道如何/是否可以在共享内存中使用C++线程互斥锁。这是我的测试代码供引用。注意squeue只是一个简单的(POD)静态大小的循环队列,省略了不相关的内容:#include#include#include/*Formodeconstants*/#include/*ForO_*consta

c++ - 将测试从 GoogleTest 升级到 GoogleMock (Ubuntu 14) 时出现与 pthread 相关的错误

尝试添加gmock时到已经在使用gtest的现有项目,我发现了一系列与pthread有关的低级错误.我的猜测是这与GoogleMock和GoogleTest的构建方式有关(请参阅下面的详细信息),但不幸的是,关于在Ubuntu14中使用这些库的最佳方式的信息不多。将代码缩减为最小的代表性示例后,会发生什么:我将GoogleTestheader替换为GoogleMockheader以及“主要”函数://Declarationsatfoo.hclassFoo{public:intsum(inta,intb);//itreturnsa+b(definedinfoo.cpp)};//Testc

c++ - 我如何为数组中的元素锁定 MUTEX,而不是为整个数组锁定

问题的简短版本:我有2个函数共享同一个数组,当一个正在编辑它时,另一个正在读取它。但是,vector很长(5000个样本)并且很少发生并发访问。但是MUTEX1上的Mutex争用正在减慢程序的速度。'如何锁定内存的某些位置而不是整个block以减少争用?编辑:注意:我必须尽可能使用更新的G值。EDIT2:例如我有长度为5000的数组G。foo1锁定mutex1以编辑索引124。虽然foo2想要编辑索引2349,它不能直到foo1释放mutex1。有没有办法可以将锁定互斥锁的争用下移到元素级别?意思是:我希望foo2和foo1只在同一个互斥锁上竞争,只有当他们想要编辑同一个索引时。例如: