草庐IT

pthread_mutex_lock

全部标签

c++ - Windows 中的 pthread_cond_timedwait()

我尝试在我的代码中实现pthread功能。不幸的是,我无法正确实现函数pthread_cond_timedwait()。在Linux中一切正常。但在Windows中,此函数始终返回错误代码10060。这是我的简单代码:#include#include#defineHAVE_STRUCT_TIMESPEC#includeintmain(){intrcTimedwait=0;structtimespectimeout;pthread_mutex_tmutex;pthread_cond_tcondVar;pthread_mutex_init(&mutex,NULL);pthread_cond

c++ - 对 pthread CLion 的 undefined reference

我正在尝试在CLion中运行这个简单的线程C++程序#include#includeusingnamespacestd;//Startofthethreadt1voidhello(){cout我的问题是存在对pthread的undefinedreference错误,我不明白我做错了什么……请注意我是在CLion上这样做的。 最佳答案 在CLion中,要使用标志-pthread进行编译,您应该将以下行添加到CMakeLists.txt(我已经测试过并且有效):SET(CMAKE_CXX_FLAGS-pthread)

c++ - 手动解锁 lock_guard 是未定义的/错误的设计吗?

我有这样的代码:do{lock_guardlck(globalMtx);autoitr=someMap.end();for(/*conditions*/){//dostuffwithitrandsomeMap//ifacertainconditionismet,weexitfunctionwithareturn//globalMtxneedstobeunlockedatthattime}if(itr==someMap.end()){//IneedtounlocktheglobalMtxhereglobalMtx.unlock()//AcommandissenttomodifysomeM

c++ - 使用 std::try_to_lock 的意外行为

当我尝试运行以下代码时,我遇到了令人惊讶和冲突的行为。#include#includeintmain(){std::mutexmtx;std::unique_locklock1(mtx);std::unique_locklock2(mtx,std::try_to_lock);std::cout当我在我的计算机上运行它时(使用clang++4.0.1或g++7.3.0的linux)它打印出lock1和lock2拥有锁(奇怪)。当我在cpp.sh上运行它时,它说lock1拥有锁,但lock2不拥有锁(如我所料)。所有都使用C++11和-Wall没有优化。 最佳答

c++ - 使用 Pthreads 的 Hello World 内存损坏

我正在研究llnl.computing.govpthreads教程中的一些简单pthread示例。网站上的程序打印出threadid的地址,但是我想把id的地址传给PrintHello,然后使用dereference这个地址来获取id。我认为每个线程都应该打印8(线程数)。代码是#include#include#include#include#defineNUM_THREADS8void*PrintHello(void*threadid){long*taskid=(long*)threadid;sleep(1);printf("Hellofromthread%ld\n",*taskid

c++ - 保持 std::mutex 锁定/解锁公开的基本原理

我的问题很简单。在C++11中,我们有std::mutex和std::lock_guard和std::unique_lock。通常使用这些类的方法是通过任何锁来锁定std::mutex。这可以防止由于异常抛出而导致的互斥锁泄漏:{std::lock_guardl(some_mutex);//Cannotleakmutex.}为什么std::mutex::lock和std::mutex::unlock是公开的?这要求不正确的用法:{some_mutex.lock();//Mutexleakedduetoexception.some_mutex.unlock();}让std::lock_g

c++ - 在 ReleaseMutex 之前在 Mutex 上关闭句柄 - 会发生什么?

如果我在线程完成互斥量之前调用互斥量上的CloseHandle,因此还没有调用ReleaseMutex,预期的行为是什么? 最佳答案 CloseHandle()立即销毁传递给它的句柄。如果使用关闭的互斥锁句柄调用,ReleaseMutex()将失败并返回ERROR_INVALID_HANDLE错误代码。如果互斥体被命名,则有一个单一的引用计数内核对象支持互斥体,但是CreateMutex()和OpenMutex()返回唯一的HANDLE必须单独关闭的值。如果创建/打开同名互斥锁的多个句柄,则在一个句柄上调用CloseHandle()

c++ - std::mutex 锁在覆盖新运算符时挂起

我们有一个内部内存管理器,用于我们的一个产品。内存管理器覆盖了new和delete运算符,并且在单线程应用程序中工作良好。但是,我现在的任务是让它也适用于多线程应用程序。根据我的理解,以下伪代码应该可以工作,但即使使用try_lock(),它也会挂起。有什么想法吗?更新#1导致“访问冲突”:#includestd::mutexg_mutex;/*!\briefOverridestheStandardC++newoperator\paramsize[in]Numberofbytestoallocate*/void*operatornew(size_tsize){g_mutex.lock(

c++ - `unique_lock`、 `scoped_lock` 和 `lock_guard` 中指定的 mutex_type 的用例是什么?

用于保护std::mutex的c++11mutexRAII类型都有一个typedef:typedefMutexmutex_type;std::lock_guard::mutex_typestd::unique_lock::mutex_typestd::scoped_lock::mutex_type这个成员typedef有什么意义?起初我认为它可以用来概括创建一个对象来移动锁(在unique_lock的情况下)例如:templatevoidfunction(SomeLockin)SomeLock::mutex_typenewMutex;//Dosomething但我无法想象它的用途。需要

c++ - MIPS 上 pthreads 中的段错误

我正在尝试在MIPSLinux机器上运行我的代码(小端,没有硬件float):#cat/proc/cpuinfo|grepmodelcpumodel:MIPS24KcV5.5我的程序在x86和ARM系统上运行良好,但在MIPS上因段错误而崩溃,总是在(或接近)pthreads库函数调用中。我尝试了两个工具链(来自here的MTIGNU/Linux工具链MIPS32R2-MIPS32R5和来自here的SourceryCodeBenchLite2016.05-8)——细节略有不同,但段错误总是发生。阅读邮件列表我发现了MIPS平台上pthreads段错误的两个原因:在uClibc的MIP