草庐IT

pthread_cond_signal

全部标签

c++ - 使用 boost::signals2 处理许多信号/槽的连接/断开

我已经开始使用boost::signals2而不是我的旧信号代码。不过,我在管理多个连接时遇到问题。这是我的问题:我有很多Person类的实例:classPerson{public:voidSetName(stringnew_name){name=new_name;NameChange(name);}stringname;boost::signals2::signalNameChange;};我还有一个人员浏览器,它必须监视所有可用人员的子集以了解变化。由于人们可以从该子集中进出,我必须有一种方法来处理连接对象,并且我创建了一个类(ConnectionList)来处理它:classCo

基于LLaMA-Factory用deepspeed多GPU训练大模型报错Caught signal 7 (Bus error: nonexistent physical address)

基于LLaMA-Factory,用4个V100的GPU,如下命令训练ChatGLM3:deepspeed--num_gpus4--master_port=9901src/train_bash.py\--deepspeedds_config.json\--stagesft\--model_name_or_pathmodels/chatglm3-6b\--do_train\--datasetaaa,bbb\--templatechatglm3\--finetuning_typelora\--lora_targetquery_key_value\--output_diroutput/aaabbbcc

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数据?我正

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++ - 公共(public) boost::signal 对象

我做了我的boost::signal公开是因为我很懒。classButton{public:signalclicked;};intmain(){Buttonbtn;btn.clicked.connect(handleClick);}...而不是用Button::OnClicked(boost::function)封装.这会回来咬我吗? 最佳答案 这取决于。以前,每当一个对象连接到另一个对象的信号时,我都想添加一些特殊的逻辑,这让我很头疼。这是最有可能咬到你的情况。此外,它可能会导致难以准确跟踪其他对象何时连接到任何给定对象。为了安全

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++ - boost::asio signal_set 处理程序仅在捕获到第一个信号后执行,并忽略相同类型的连续信号

我有一个程序,我想通过发送SIGINT将一些数据写入文件而不是立即退出来停止它。但是,如果程序的用户再次发送SIGINT,则程序应立即退出并忘记将数据写入文件。出于可移植性的原因,我想为此目的使用boost::asio。我最初的(简化的)方法(见下文)没有奏效。这是不可能的还是我遗漏了什么?处理程序似乎只被调用一次(打印出消息)并且程序总是在循环达到最大迭代次数时停止。voidhandler(constboost::system::error_code&error,intsignal_number){if(!error){staticboolfirst=true;if(first){s