草庐IT

pthread_yield

全部标签

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++ - 将测试从 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++ - 调用 gcc _without_ -pthread 有什么好处?

我们知道添加-pthreadmakesGCCusereentrant/thread-safecode(编译C/C++代码时)。虽然我想如果您允许不可重入,您确实可以在这里和那里节省几个周期-我想知道不总是指定-pthread是否有任何实际优势。有吗? 最佳答案 一个例子:std::shared_ptr的libstdc++实现doesn'tuselockingwhencompiledwithout-pthread,如果您在单线程环境中大量使用共享指针,这可以大大提高性能。 关于c++-调用

c++ - PThread 初学者 - 启动、同步、停止工作线程

我有以下经理员工情况:classManager{private:pthread_attr_tworkerSettings;pthread_tworker;pthread_cond_tcondition;pthread_mutex_tmutex;boolworkerRunning;staticvoid*worker_function(void*args){Manager*manager=(Manager*)args;while(true){while(true){pthread_mutex_lock(&manager->mutex);if(/*newdataavailable*/){/*

c++ - 如何使用 yield_context 作为 resolver.async_resolve 的处理程序?

使用yield_context作为堆栈协程中Asio异步操作的处理程序非常棒!但是ip::basic_resolver::async_resolve的处理程序具有与简单地接收错误代码不同的签名(我很好奇为什么它不将resolver::iterator&作为async_resolve中的参数,就像basic_socket&中的basic_socket_acceptor::async_accept参数一样)).有没有办法使用yield作为它的处理者?同样的问题也适用于async_connect. 最佳答案 如StackfulCorout

c++ - 我应该如何在我自己的函数中传递 boost::asio::yield_context?

我正在编写一个在底层使用Boost.Asio的C++11网络库。我想公开一个允许用户使用堆栈协程的API。我应该如何在我的API函数中接受boost::asio::yield_context参数?按值(value)?引用?通过const引用?我不知道这些yield_context对象的复制成本有多高。例如:ResultremoteProcedureCall(Argsargs,boost::asio::yieldcontextyield)//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Howtopass?我知道我可以拿一个通用的引用做完美转发:templateResul

c++ - std::thread vs pthread,我做错了什么?

我正在从事一个需要在docker容器内执行某些进程的项目。我想处理进程没有按时终止的情况(比如说在10秒内)。我正在使用这个DockerClientpp用于管理基本上只向Docker套接字发出HTTP请求的容器的库。到目前为止一切都很好。要停止花费太长时间的容器,我使用了一个单独的线程。问题是我能够使用ptheads来实现它,但是我找不到使用std::thread和lambas的方法这是我使用pthread的工作实现void*ContainerManager::spawnKiller(void*ref){ContainerManager*self=(ContainerManager*)

c++ - 这个简单的 pthread 代码的奇怪行为

如果我编译并运行下面的代码1#include2#include3#include4#include56#defineNTHREADS47#defineN1008#defineMEGEXTRA1000000910usingnamespacestd;1112pthread_attr_tattr;1314void*doWork(void*threadid){15doubleA[N][N];16inttid=*(reinterpret_cast(threadid));17size_tmyStackSize;18pthread_attr_getstacksize(&attr,&myStackSi

c++ - pthread_mutex_lock 上的段错误

当我尝试这样做时出现段错误pthread_mutex_lock(&_mutex).这真的很奇怪,我不确定是什么原因造成的。我已经在构造函数中初始化了_mutexpthread_mutex_init(&_mutex,NULL).有什么我能做的吗? 最佳答案 解决了,我对此很恼火。我想将Producer*作为参数发送给Pthread运行的函数,所以我使用了&(*iter),其中iter是在生产者vector上运行的迭代器。我几乎没有注意到它(理所当然地)是一个vector,这意味着我一直在发送Producer**,它产生了未定义的结果。