草庐IT

thread_posixs

全部标签

c++ - 如何获取 std::thread() 的 Linux 线程 ID

我正在玩std::thread,我想知道如何获得新的std::thread()的线程ID,我是不是在谈论std::thread::id而是给线程的操作系统ID(您可以使用pstree查看它)。这仅供我所知,并且仅针对Linux平台(不需要可移植)。我可以像这样在线程中获取Linux线程ID:#include#include#include#include#includevoidSayHello(){std::cout但是如何在主循环中检索相同的ID?我没有找到使用std::thread::native_handle的方法。我相信有可能通过pid_tgettid(void);获得它,因为

c++ - 使 thread_local 变量完全易变

我正在开发一个使用用户级上下文切换(使用Boost::Context)的运行时库,但在使用thread_level变量时遇到了问题。考虑以下(简化的)代码:thread_localint*volatiletli;intmain(){tli=newint(1);//part1,donebythread1UserLevelContextSwitch();intli=*tli;//part2,donebythread2cout由于对thread_local变量有两次访问,编译器将main函数转换为类似以下行的内容(与汇编相反):registerint**ptli=&tli;//cachead

c++ - 跨平台对 'thread_local' 的支持现状如何?

我想总结一下不同编译器和平台对“thread_local”关键字的当前支持状态。我对常见的桌面和移动平台特别感兴趣。我能找到的信息充其量只是关于它在某些平台上工作而不是在其他平台上工作的报告,或者提到支持是WIP。欢迎确认支持(或不支持)的答案,即使对于单个平台也是如此。如果有任何注意事项,请向支持人员提及。Windows(gcc、clang、msvc)Linux(gcc,clang)OSX(gcc、clang)Android(gcc、clang)苹果手机黑莓手机WindowsPhone/RT/等 最佳答案 作为对另一个优秀答案的补

c++ - 使用 boost::thread 的并行任务比使用 ppl 或 OpenMP 获得更好的性能

我有一个可以并行化的C++程序。我正在使用VisualStudio2010,32位编译。简而言之,程序的结构如下#definenum_iterations64//somenumberstructresult{//somestuff}resultbest_result=initial_bad_result;for(i=0;i由于每个some_computations()都是独立的(读取了一些全局变量,但没有修改全局变量)我并行化了内部for循环。我的第一次尝试是使用boost::thread,thread_groupgroup;for(j=0;j结果不错,但我决定多尝试一下。我尝试了Op

c++ - Windows 上的 std::conditional_variable::wait_for、std::thread::sleep_for 受调整时钟的影响

嗯。我有Win10x64和这个非常简单的代码:intmain(){std::conditional_variablecv;std::mutexm;std::unique_locklock(m);while(1){cv.wait_for(lock,1000ms,[](){returnfalse;});std::cout是的。代码就像我期望的那样工作;表明'!'每一秒。但是,如果我更改本地时间(例如减去1小时/分钟),它会永远有效。如果我用WinAPISleep(1000)替换cv.wait_for(...)它工作正常。WinAPISleepConditionVariableCS也能正常工

c++ - 使用静态链接启动 std::thread 会导致段错误

为了学习c++11(和boost),我正在使用boostasio和c++11(用于线程和lambda)编写一个简单的http服务器。我想测试新的c++11lambda和std::thread,所以我尝试在带有lambda的std::thread中像这样启动io_service.run():#include#include#include#includeusingstd::cout;usingstd::endl;usingboost::asio::ip::tcp;classHttpServer{public:HttpServer(std::size_tthread_pool_size):

c++ - std::thread 的 drd 和 helgrind 支持的当前状态

当我将我的代码转换为C++11时,我非常想将我的pthread代码转换为std::thread。但是,我似乎在drd和helgrind中的非常简单的程序中遇到了错误的竞争条件。#includeintmain(intargc,char**argv){std::threadt([](){});t.join();return0;}Helgrind输出片段-我在drd中也遇到了类似的错误,在Ubuntu11.11amd64上使用gcc4.6.1、valgrind3.7.0。我的问题是:健全性检查:我做错了什么吗?其他人是否在简单的std::thread程序上收到类似的错误报告?std::thr

c++ - posix_spawnp 和管道子输出到一个字符串

我正在努力创建进程并将子进程的输出通过管道传输到父进程的字符串中。我让它在Windows上运行(使用CreatePipe和CreateProcess和ReadFile),但似乎无法在Unix上运行精确的模拟。这是我的代码:#include#include#include#include#include#include#include#include#includeusingnamespacestd;intmain(){intexit_code;intcout_pipe[2];intcerr_pipe[2];posix_spawn_file_actions_taction;if(pipe

c++ - 为什么 std::condition_variable 作为类成员会导致 std::thread 出现编译错误?

我尝试将std::condition_variable作为类成员,但在将此类的对象传递给std::thread时出现了很多编译错误。我从我的实际程序中删除了所有其他代码,并以下面的最小代码结束。删除std::condition_variable不会导致任何问题。我尝试在构造函数中“初始化”变量,并使其成为inline,但都没有帮助。#include#includestructThreadHandler{voidoperator()(){}std::condition_variablecond;};intmain(){ThreadHandlerth1;std::threadt1(th1)

php - Windows 上的 Posix 和国际扩展

当我安装Symfony2沙盒并尝试通过check.php检查要求时,我遇到了2个问题。我的服务器没有posix和intl扩展名。我在Windows732位上使用WampServer2.1e(32位),所以我的apache和php版本是:Apache2.2.17VC6线程安全PHP5.3.5我正在尝试应用http://windows.php.net/downloads/releases/php-5.3.5-Win32-VC6-x86.zip的国际扩展名但我在apache日志中出现奇怪的错误:“无法在c:/wamp/...中找到扩展名”我确定该扩展名位于正确的目录中并在php.ini中启用