草庐IT

pthread_mutex_trylock

全部标签

c++ - Pthread 程序运行速度随着线程的增加而变慢

我是并行编程的初学者,我尝试使用pthread库编写并行程序。我在8处理器计算机上运行该程序。问题是,当我增加NumProcs时,每个线程都会变慢,尽管它们的任务总是相同的。有人可以帮我弄清楚发生了什么吗?`#defineMAX_NUMP16usingnamespacestd;intNumProcs;pthread_mutex_tSyncLock;/*mutex*/pthread_cond_tSyncCV;/*conditionvariable*/intSyncCount;/*numberofprocessorsatthebarriersofar*/pthread_mutex_tThr

c++ - 什么时候 std::shared_timed_mutex 比 std::mutex 慢,什么时候(不)使用它?

我正在尝试使用this在C++中实现多线程LRU缓存文章作为提示或灵感。它适用于Go,但所需的概念或多或少也存在于C++中。本文建议在散列表和链表周围使用带有共享互斥锁的细粒度锁定。所以我打算用std::unordered_map写一个缓存,std::list并使用std::shared_timed_mutex锁定.我的用例包括几个线程(4-8)使用此缓存作为拼写错误的单词和相应可能的更正的存储。缓存的大小约为10000-100000个项目。但是我在几个地方读到,使用共享互斥锁而不是普通互斥锁几乎没有意义,而且速度更慢,尽管我找不到一些带有数字的真实基准或至少在何时使用和何时不使用的模

c++ - pthread-win32 扩展 sem_post_multiple

我目前正在围绕pthreads构建一个薄的C++包装器供内部使用。Windows和QNX都是目标,幸运的是pthreads-win32端口似乎工作得很好,而QNX符合我们实际目的的POSIX。现在,在实现信号量时,我点击了函数sem_post_multiple(sem_t*,int)这显然只在pthreads-win32上可用,但在QNX中缺失。顾名思义,该函数应该通过作为第二个参数给出的计数来增加信号量。据我所知,该函数既不是POSIX1b也不是POSIX1c的一部分。虽然目前对上述功能没有要求,但我仍然想知道为什么pthreads-win32提供该功能以及它是否有用。我可以尝试使用

c++ - 关于pthread调度器和优先级的问题

我在Debian7上使用gccc++4.7。我想为我的线程设置一些优先级。看起来我必须通过pthread来完成。我对pthread中的调度程序策略和优先级感到困惑。问题1:我在我的C++代码中使用sched_setscheduler将线程调度程序设置为SCHED_RR。这个进程中的所有线程都会使用这个实时调度程序吗?或者我可以在一个进程中为不同的线程设置不同的调度程序策略?问题2:线程优先级是只在进程内部生效还是跨进程生效?例如。我有两个进程都使用SCHED_RR。一个有一个优先级为99的线程,另一个有一个优先级为98的线程。前一个线程的优先级是否高于后者?如果线程使用不同的调度程序怎

c++ - 关于 pthread_cond_wait?

我有以下代码:typedefstruct{...volatileinti_lines_completed;pthread_mutex_tmutex;q265_pthread_cond_tcv;...}q265_picture_t;voidq265_frame_cond_broadcast(q265_picture_t*frame,inti_lines_completed){pthread_mutex_lock(&frame->mutex);frame->i_lines_completed=i_lines_completed;pthread_cond_broadcast(&frame->

c++ - "std::map with mutexes"与 "libcds maps (Michael Hashmap and Split Order List)"并行插入、查找、删除之间是否有任何速度测试?

所以我真的很想看到一些并行的速度测试(比如从100到10000个并行线程),其中每个线程至少在3种类型的并发映射上插入、查找、删除-std::map(有一些互斥锁)与libcds(ConcurrentDataStructures)...例如,如果这样的比较尚不存在,请帮助我创建一个。直接相关:LibCds:MichaelHashmapandSplitOrderList假设我们有#include#include#includeclassTestDs{public:virtualboolcontainsKey(intkey)=0;virtualintget(intkey)=0;virtua

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++ - 为什么 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++ - 将 pthreads 与 CUDA 结合使用 - 设计问题

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