pthreads相关内容

Pthread超时

我唯一想做的就是启动一个线程,看看它是否在一定时间内完成了. OS:linux;语言:C ++. 我不想使用不可移植的功能(例如此答案中的建议). 除了使用互斥锁和条件变量(如此处所示)?两个线程之间没有共享数据,因此从技术上讲,我不需要互斥体.对于启动线程的函数,我想要的只是继续执行 线程已结束或 已经过去了一段时间. ...并使代码尽可能简单. 解决方 ..
发布时间:2021-05-29 23:01:01 服务器开发

使用 pthreads 在挂起模式下创建线程

在Win32中,可以通过将 dwCreationFlags 参数与CREATE_SUSPENDED一起使用来以挂起模式创建线程.我正在寻找与pthreads类似的功能.请注意,我不想在运行线程后再通过使用条件变量暂停该线程,而实际上是在暂停模式下创建它,然后稍后再启动它. 使用这种方法的优点是,我可以在运行该线程之前为其分配一些属性.例如,在启动之前将其绑定到某个核心,这比先启动然后将其分配 ..
发布时间:2021-05-29 23:00:13 服务器开发

在此范围内未声明"pthread_setname_np"

我在我的应用程序中创建了多个线程.我想为每个pthread分配一个名称,所以我使用了 pthread_setname_np ,它在Ubuntu上可用,但在SUSE Linux上不可用. 我在Google上搜索了一下,才知道'_np'的意思是'不可移植的',并且该API并非在所有Linux操作系统上都可用. 所以现在我只想在API可用的情况下执行此操作.如何确定api是否可用?我需要这样 ..
发布时间:2021-05-29 22:59:51 服务器开发

如何计算PHP脚本(Linux)中的处理器核心数?

我正在尝试使用pthreads进行多线程处理.我正在用构造函数创建池.第一个参数是工人数. $ pool = new Pool(8,'WebWorker'); 我想自动检测处理器核心的数量.像这样: $ pool = new Pool(get_processor_cores_number(),'WebWorker'); PHP怎么可能? 解决方案 如果服务器是Linux计算 ..
发布时间:2021-05-29 22:52:31 PHP

禁用__thread支持

我正在实现一个非常轻量级的pthread替换库.我想完全禁用__thread的原因有几个. 这是浪费内存.如果我要创建一千个与__thread声明变量的上下文无关的线程它们仍将分配 程序仍将分配 1000 *大小的数据字节,并且永远不要使用它.它根本不是与大容量并发模型兼容的内存.如果我们需要只有8K堆栈的极轻量级的光纤,那么仅4K的TLS块将占用每个线程所用内存的50%.在某些情况下,TL ..
发布时间:2021-05-29 22:48:32 服务器开发

在Linux上编写多线程TCP服务器

在工作中,我的任务是将TCP服务器实现为Modbus从设备的一部分.在堆栈交换和一般的Internet上,我都读了很多书(包括出色的 http://beej.us/guide/bgnet/),但我在设计问题上苦苦挣扎.总而言之,我的设备只能接受2个连接,并且在每个连接上都是传入的Modbus请求,我必须在主控制器循环中对其进行处理,然后以成功或失败状态进行回复.关于如何实现这一点,我有以下想法. ..
发布时间:2021-05-29 22:46:38 服务器开发

POSIX线程何时不立即取消?

POSIX为线程取消类型指定两种类型: PTHREAD_CANCEL_ASYNCHRONOUS 和 PTHREAD_CANCEL_DEFERRED (由 pthread_setcanceltype(3)设置)确定何时 pthread_cancel(3)应该生效.就我的阅读而言,POSIX手册页对此没有多说,但是Linux手册页说了有关 PTHREAD_CANCEL_ASYNCHRONOUS 的以下 ..
发布时间:2021-05-29 22:43:34 服务器开发

线程和进程的不同信号处理程序?是否可以

关于信令的问题很少. 1)当进程与主线程一起具有更多线程时,并且如果引发了信号,则哪个线程将停止其处理并继续进行信号处理程序?是主线程还是主线程以外的线程? 2)是否可以为主线程和特定线程之间的同一信号保留不同的处理程序? 解决方案 信号可以发送到进程或特定线程.对于发送到进程的信号,只要有至少一个线程未阻塞该信号,便会立即发送该信号;如果有多个这样的线程,则可能会将该信号传递 ..
发布时间:2021-05-29 22:42:32 服务器开发

我的线程可以帮助OS决定何时进行上下文切换吗?

我正在使用C ++在Linux上开发一个线程应用程序,该应用程序试图做到实时,对心跳进行操作或尽可能接近它. 在实践中,我发现操作系统正在换出线程,并在关闭线程时导致长达十分之一秒的延迟,从而导致心跳不正常. 我的线程是否可以向操作系统提示现在是上下文切换的好时机?我可以在心跳结束后立即拨打此电话,从而将因上下文切换不及时而导致的延迟降到最低. 解决方案 很难说出您所遇到的主要 ..
发布时间:2021-05-29 22:40:32 服务器开发

ps显示线程名称

ps (或类似工具)是否可以显示pthread的名称?我编写了以下简单程序: //th_name.c#include#include无效* f1(){printf("f1:开始睡眠\ n");睡眠(30);printf("f1:完成睡眠\ n");}int main(){pthread_t f1_thread;pthread_create(& f1_t ..
发布时间:2021-05-29 22:37:13 服务器开发

带有 clone() 和 printf 的段错误

我正在尝试对Linux 3.10.0-327.3.1.el7.x86_64中的线程实现 clone()的方式进行实验 我正在运行这段代码,并偶尔出现段错误.我知道如果使用 CLONE_THREAD ,那么无法检查线程是否完成,但是为什么 printf 会引起问题? Pthread 库如何处理此问题?没有 printf ,就不会有段错误. #define STACK_SIZE(1ULL ..
发布时间:2021-05-29 22:26:28 服务器开发

Linux套接字使用多个线程发送

我有一个非阻塞套接字,它向多个目标发送udp数据包,并在同一套接字上接收所有这些对象的响应.我正在读一个专用线程,但是写(sendto)可能来自几个不同的线程. 在没有任何其他同步的情况下这是安全的吗?持有互斥体时需要写东西吗?或者,写操作是否需要来自同一线程,并且我需要一个队列? 解决方案 内核将为您同步对底层文件描述符的访问,因此您不需要单独的互斥体.如果您使用的是TCP,则这种 ..
发布时间:2021-05-29 22:22:10 服务器开发

pthread_create失败,并显示EAGAIN

请在此处考虑此代码段,在这里我试图创建一堆线程,这些线程最终将处理模拟竞态条件的给定任务. const int thread_count = 128;pthread_t线程[thread_count];为(int n = 0; n!= thread_count; ++ n){ret = pthread_create(& threads [n],0,test_thread_fun,& test_ ..
发布时间:2021-05-29 22:17:49 服务器开发

如何使用用户输入创建全局变量

我希望创建以下内容: int数量[i]; 作为全局变量(用于练习使用线程和互斥锁),但是变量 i 是在程序启动时定义的: ./a.out 10 如何通过主( argv [1] )取值并相应地创建全局值? 解决方案 您可以使用全局指针变量,然后基于argv [1]分配内存. int *数量;int main(int argc,char * argv []){int cou ..
发布时间:2021-05-11 19:00:50 其他开发

未定义对"pthread_cancel"的引用

我用 pthread 编写了以下 T 类.当我使用g ++ -lpthread编译此类时,它工作正常.但是,如果我从另一个类 A 扩展该类并一起编译,则会返回错误;“对pthread_cancel的未定义引用" 代码: T类{私人的:pthread_t线程;上市:无效的start(){pthread_create(& thread,NULL,& run,this);}void destr ..
发布时间:2021-05-09 20:31:23 C/C++开发

如何释放主线程中的线程功能分配的内存

我已经在线程函数 f1 中分配了 heap 内存,此存储用于计算堆区域中的值,以便主函数可以看到它./p> 这是线程函数定义: void * f1(void * input){int sum =(int *)malloc(sizeof(int));/*计算*/pthread_exit((void *)& sum);} 在上面的代码中, sum 是堆分配的存储,其地址作为返回值传递到 ma ..
发布时间:2021-05-09 19:29:43 其他开发

xQueue ESP32无法发送两个命令

我正在寻求帮助,因为我在这个问题上坚持了很长时间.我家里有一个ESP32 wrover工具包,我已经用uart将它连接到Zigbee网关模块.我想通过uart向模块发送一些命令,因为我将这些命令放在xQueue中,并且进入了一个线程以发送至uart.在另一个线程中,我通过uart得到了答案.第一条消息一切正常,然后在读取第二条消息时出现崩溃.我认为这是因为我的tx_msg不再存在于内存中,但是我无 ..
发布时间:2021-05-04 20:59:53 其他开发