草庐IT

非阻塞

全部标签

C++ pthread阻塞队列死锁(我认为)

我在使用pthreads时遇到问题,我认为我遇到了死锁。我创建了一个我认为有效的阻塞队列,但在进行更多测试后,我发现如果我尝试取消阻塞在blocking_queue上的多个线程,我似乎会遇到死锁。阻塞队列很简单,看起来像这样:templateclassBlocking_Queue{public:Blocking_Queue(){pthread_mutex_init(&_lock,NULL);pthread_cond_init(&_cond,NULL);}~Blocking_Queue(){pthread_mutex_destroy(&_lock);pthread_cond_destro

c++ - 在 Qt 中,当事件循环线程拥有的 QObject 上的槽正在执行时,QThread 的事件循环是否会阻塞?

我想确认我认为Qt中工作线程的一个简单方面。假设我创建了一个QThread,它的目的是管理其对应线程中的耗时工作。此外,假设我通过调用QThread上的start()允许该线程的相应事件循环运行。工作本身由QThread的started()信号发出信号的成员函数(槽)执行。即(从https://stackoverflow.com/a/11039216/368896复制):classTask:publicQObject{Q_OBJECTpublic:Task();~Task();publicslots:voiddoWork(){//verytime-consumingcodeisexec

c++ - 为什么我的线程被一个没有被任何东西占用的关键部分阻塞?

我在C++中遇到临界区问题。我遇到了一个挂起的窗口,当我转储进程时,我可以看到线程在关键部分等待:16Id:b10.b88Suspend:1Teb:7ffae000UnfrozenChildEBPRetAddr0470f1587c90df3cntdll!KiFastSystemCallRet0470f15c7c91b22bntdll!NtWaitForSingleObject+0xc0470f1e47c901046ntdll!RtlpWaitForCriticalSection+0x1320470f1ec0415647entdll!RtlEnterCriticalSection+0x4

c++ - 为什么 future::wait() 不阻塞

#include#include#include#includeintmain(){autopms=std::promise();autoftr=pms.get_future();std::thread([&](){pms.set_value("helloworld");});ftr.wait();std::cout根据thislink,std::future::wait阻塞直到结果可用。但是,上面的代码不能打印任何东西。显然主线程在pms.set_value线程完成之前就已经完成了。为什么ftr.wait()不阻塞? 最佳答案 问

c++ - 为 WinSocks 和 *nix 制作非阻塞套接字

在C/C++中,如何在WinSocks和*nix中将阻塞套接字转换为非阻塞套接字;这样select()才能正常工作。您可以为特定于平台的代码使用预处理器。 最佳答案 在Linux上:fcntl(fd,F_SETFL,O_NONBLOCK);Windows:u_longon=1;ioctlsocket(fd,FIONBIO,&on); 关于c++-为WinSocks和*nix制作非阻塞套接字,我们在StackOverflow上找到一个类似的问题: https:/

c++ - 非阻塞线程安全内存池实现

我需要一个简单的非阻塞静态block大小内存池。我在网上没有找到这样的。所以每个人,谁需要这样的解决方案。这是免费的...仅适用于Win32。最好的问候,弗里德里希#ifndefMEMPOOL_HPP_INCLUDED#defineMEMPOOL_HPP_INCLUDED#include"atomic.hpp"#include"static_assert.hpp"#pragmawarning(push)#pragmawarning(disable:4311)//warningC4311:'Typumwandlung'///@briefBlock-freememory-poolimple

c++ - std::condition_variable 伪阻塞

如您所知,条件变量应循环调用以避免虚假唤醒。像这样:while(notcondition)condvar.wait();如果另一个线程想要唤醒等待的线程,它必须将条件标志设置为真。例如:condition=true;condvar.notify_one();请问这种情况会不会阻塞条件变量:1)等待线程检查条件标志,发现条件标志等于FALSE,于是进入condvar.wait()程序。2)但在此之前(但在条件标志检查之后)等待线程被内核抢占(例如,由于时隙到期)。3)这时,另一个线程要通知等待线程有关情况。它将条件标志设置为TRUE并调用condvar.notify_one();4)当内

c++ - 停止阻塞在 recv() 上的接收器线程

我有一个聊天应用程序,它有一个单独的线程来监听传入的消息。while(mainthreadnotcallingforreceivertoquit){stringmessage=tcpCon.tcpReceive();//Reliesontherecv()functionprocessIncomingMessage(message);}这种工作方式有一个大问题。大多数时候,循环将阻塞在recv()上,因此接收线程不会退出。在几秒钟后不强制线程终止的情况下,解决此问题的正确方法是什么? 最佳答案 使用shutdown()关闭套接字,为所

c++ - 静态/静态本地 SSE/AVX 变量是否阻塞了 xmm/ymm 寄存器?

使用SSE内在函数时,通常需要零vector。避免在调用函数时(每次有效地调用一些异或vector指令)在函数内创建零变量的一种方法是使用静态局部变量,如staticinline__m128inegate(__m128ia){static__m128izero=__mm_setzero_si128();return_mm_sub_epi16(zero,a);}似乎变量只在第一次调用函数时才被初始化。(我通过调用一个真正的函数而不是_mm_setzero_si128()内在函数来检查这一点。顺便说一下,它似乎只在C++中是可能的,而不是在C中。)(1)但是,一旦初始化发生:这是否会为程序

ios - 编辑期间阻塞的字段。 ( swift - iOS)

要求我想在另一个文本字段中输入另一个文本时阻止文本字段(UITextField)。示例我在一个表单上有两个文本字段。在第一个文本字段中输入时,第二个文本字段被禁用(即您甚至无法通过触摸按下它),只有当您完成第一个文本字段的编辑后,您才能编辑第二个文本字段。 最佳答案 您可以将文本字段添加到一个数组中,并使用Equatable协议(protocol)来比较DidBeginEditing函数中的文本字段并“禁用”其他字段。但是当您完成编辑后,您需要重新打开所有文本字段。还要确保您的类在声明中有UITextFieldDelegate。va