草庐IT

pthread_rwlock_rdlock

全部标签

c++ - 为什么使用 std::mutex 的函数会对 pthread_key_create 的地址进行空检查?

采用这个简单的函数,在由std::mutex实现的锁下递增整数:#includestd::mutexm;voidinc(int&i){std::unique_locklock(m);i++;}我希望这(在内联之后)以一种直接的方式编译为调用m.lock()增量i然后m.unlock().检查为最新版本的gcc和clang生成的程序集,但是,我们发现了一个额外的复杂问题。先拿gcc版本:inc(int&):moveax,OFFSETFLAT:__gthrw___pthread_key_create(unsignedint*,void(*)(void*))testrax,raxje.L2p

c++ - 链接 pthread 时启动时出现简单的可执行段错误

花了一整天时间调查这个错误,我的同事说它看起来像一个链接器或库错误。我以前从未有过这样的事情,所以我在这里记录下来并寻求帮助!在调用main之前我的可执行文件出现段错误ProgramreceivedsignalSIGSEGV,Segmentationfault.0x0000000000000000in??()(gdb)bt#00x0000000000000000in??()#10x00007ffff7b47901in??()from/usr/lib/x86_64-linux-gnu/libstdc++.so.6#20x00007ffff7b47943instd::locale::loc

c++ - C/C++ 编译器能否通过 pthread 库调用合法地将变量缓存在寄存器中?

假设我们有以下代码:#include#include#includevoidguarantee(boolcond,constchar*msg){if(!cond){fprintf(stderr,"%s",msg);exit(1);}}booldo_shutdown=false;//Notvolatile!pthread_cond_tshutdown_cond=PTHREAD_COND_INITIALIZER;pthread_mutex_tshutdown_cond_mutex=PTHREAD_MUTEX_INITIALIZER;/*CalledinThread1.Intendedbeh

c++ - pthread_create() 是如何工作的?

鉴于以下情况:pthread_tthread;pthread_create(&thread,NULL,function,NULL);pthread_create对thread到底做了什么?thread在加入主线程并终止后会发生什么?如果在thread加入后执行此操作会发生什么情况:pthread_create(&thread,NULL,another_function,NULL); 最佳答案 Whatexactlydoespthread_createdotothread?thread是一个对象,它可以持有一个值来标识一个线程。如果p

c++ - 采访 : what is the difference between pthread and windows thread created by _beginthread(ex)?

我在一次C++开发人员职位面试中被问到这个问题,这个问题的答案是什么? 最佳答案 我会说:IfIwantedtocreateaportablecross-platformC++binary,I'dusepthreadsandusethepthreadimplementationforwindows.IfIwantedtocreateawindows-specificC++binary,I'dusebeginthreadandavoidthe3rdpartydependencyonthepthreadlibrary.如果他们真的想知道

c++ - 在指定 C++ 异常和 pthread 取消的交互方面有什么进展吗?

最近,GNUC库使用DWARF2展开用于pthread取消,因此C++异常和pthread取消清理处理程序都通过公共(public)调用框架展开过程调用,该过程在必要时调用自动对象的析构函数。然而,据我所知,仍然没有指定(POSIX)线程和C++之间交互的标准,并且可能希望可移植的应用程序应该假设从取消清理上下文中抛出异常与调用longjmp,并且取消具有非平凡析构函数的实时自动对象的线程也是未定义的行为。是否有任何正在进行的标准化流程来处理这种交互,或者它是否可以预期在未来很长一段时间内未定义?C++11在其线程支持中是否有任何类似于POSIX线程取消的概念?

c++ - 当我在 C++ 中终止 pThread 时,是否会调用堆栈上对象的析构函数?

我正在编写多线程C++程序。我打算杀死线程。但是,我也在使用引用计数GC。我想知道当线程被终止时,堆栈分配的对象是否会被破坏。 最佳答案 当您“杀死”一个线程时,堆栈不会展开。杀死线程不是一种稳健的操作方式-它们打开的资源(例如文件)在进程关闭之前一直保持打开状态。此外,如果他们在您关闭它们时保持打开任何锁,则该锁可能会保持锁定状态。请记住,您可能会调用很多您无法控制的平台代码,并且您并不总是能看到这些东西。关闭线程的优雅而稳健的方法是中断它-通常它会轮询以查看它是否被告知要定期关闭,或者它是否正在运行消息循环并且您向它发送退出消息

c++ - 是否有必要在互斥锁上调用 pthread_mutex_destroy?

我在C++程序中使用pthread_mutex_t,如下:classMutex:publicnoncopyable{public:Mutex(){pthread_mutex_init(&m_mutex,NULL);}voidacquire(){pthread_mutex_lock(&m_mutex);}voidrelease(){pthread_mutex_unlock(&m_mutex);}private:pthread_mutex_tm_mutex;};(类不可复制-http://www.boost.org/doc/libs/1_53_0/boost/noncopyable.hpp

我可以让 Unix 的 pthread.h 在 Windows 中编译吗?

如果我尝试编译一个程序#include在其中,我得到了错误:pthread.h:Nosuchfileordirectory是否可以在Windows环境中进行编译?我正在使用带有最新MinGW的Vista。我不想使用适用于UNIX3.5版的MicrosoftWindows服务,因为我必须将其移动到Unix环境。 最佳答案 pthread.h是用于线程的Unix/Linux(POSIX)API的header。诸如Cygwin之类的POSIX层可能会使用#include编译应用程序.nativeWindows线程API通过#include

PHP + PThreads + Redis/Predis = zend_mm_heap 已损坏?

这几天我一直在为一个神秘的错误而苦苦挣扎。我使用的是PHP7.1.0RC3(我在启用ZTS/pthreads的情况下重新编译了自己)。最近,我一直在进行重构,用Redis替换MySQL以优化我的应用程序中非磁盘值(value)的数据I/O。我有一个脚本可以为每个加密货币市场创建一个线程(A)。线程(A)为每个交易策略创建另一个线程(B)。B线程总是在A线程之前同步。我不断收到此错误:zend_mm_heap已损坏。每次我运行脚本时,它都会在不同的执行点发生。我已经尝试了所有建议的修复、100多个Google页面。垃圾收集、PHP配置/编译,所有这些都经过了非常详细的审查。我没有发现任何