pthreads相关内容
如果我看一下 pthread_equal 的实现,它看起来如下: int__pthread_equal (pthread_t thread1, pthread_t thread2){返回线程 1 == 线程 2;}弱别名(__pthread_equal,pthread_equal) 与 typedef unsigned long int pthread_t; Posix 文档说 pthre
..
我编写了一个客户端/服务器应用程序,其中服务器根据来自客户端的请求生成多个线程. 这些线程应该向客户端发送一些数据(字符串). 问题是,数据在客户端被覆盖.我该如何解决这个问题? 我已经阅读了一些关于类似问题的其他主题,但无法找到确切的解决方案. 这是我接收数据的客户端代码. while(1){字符增益[MAX_BUFF];int bytes_read = read(sd
..
我正在创建 10 个线程.每个线程都会做一些任务.有7个任务要完成.由于任务数小于线程数,因此总会有 3 个线程处于休眠状态并且什么也不做. 我的主线程必须等待任务完成并只有在所有任务完成时(即线程退出时)才退出.我在 for 循环中等待并调用 pthread_join 但是有 3 个线程正在休眠,我该如何唤醒它们并使它们退出? 这就是我现在正在做的事情. //线程处理函数,创建线程
..
我正在开发一个服务器-客户端项目,该项目允许服务器交换消息与客户单独.但是,我必须修改服务器,以便在服务器发送消息时,将其发送给所有连接的客户端. 我知道这涉及在线程之间共享变量,但我对如何去做这件事感到困惑? 任何提示/指导将不胜感激! 服务器代码: #include#include//strlen#include//strlen#include#include//inet_
..
我希望你能帮助我解决我的麻烦.我的程序正在做一些我不太理解的事情.程序目的如下:创建两个线程(task_timer 和 task_read).这些线程必须在标准输出 (stdout) 上显示以下消息:“贴 1标签 2标签 1标签 2……" 代码: static void* task_timer(void* arg);静态无效* task_read(无效* p);结构 strShared{p
..
我有以下代码,它被 SEGV 信号杀死.使用调试器显示它被 main() 中的第一个 sem_init() 杀死.如果我注释掉第一个 sem_init() ,第二个会导致同样的问题.我已经尝试找出什么会导致这个 sys 调用导致 SEGV.else 没有运行,因此错误发生在它可以返回值之前.任何帮助将不胜感激,谢谢. 我删除了在此问题发生之前未运行的其余代码. #define PORTNU
..
我只是使用 C 编程的初学者.对于我的大学项目,我想创建一个多线程服务器应用程序,多个客户端可以连接到该应用程序并传输可以保存在数据库中的数据. 在阅读了许多教程后,我对如何使用 pthread_create 创建多个线程感到困惑. 某处是这样完成的: pthread_t thr;pthread_create( &thr, NULL , connection_handler , (v
..
我正在制作一个小项目,该项目将被合并到更大的项目中.基本上它的作用是跟踪通过将它们添加到主结构中创建的线程,该主结构跟踪线程的作用(其主要功能)及其 pthread_t id.另一个结构跟踪要传递给函数的数据以及 pthread_t id 存储在线程 [] 中的元素编号.它有点像老鼠,它会跳来跳去,但除了何时终止线程之外,它都可以正常工作.我没有得到段错误,也没有错误,程序完成得很好,但是当 pt
..
我是编程新手,刚开始在c语言中使用pthread.我很好奇多线程对性能的提升程度.为了测试这一点,我编写了一个简单的程序来计算 n 位数字的总和(老实说,它来自 youtube 视频).我给了它一些真正的大数字来获得一些执行时间的值. #include#includelong long sum=0,pod=1;void* sum_run(void* arg){long long *var_ptr
..
我正在使用 pthread 库制作一个程序,用莱布尼茨公式找到 pi 的准确值.我正在这里处理共享资源.我的多线程函数如下所示: void *Leibniz(void *vars){结构变量 *val = (结构变量 *)vars;int startLimit = val->start;int endLimit = val->end;国际我;for (i = startLimit; i 当我
..
detachNewThreadSelector 和 performSelectorInBackground 都用于在后台调用一个方法. 这两种方法有什么区别吗?还是它们的工作方式相同? 解决方案 它们本质上是相同的,但范例略有不同.在幕后,他们做着完全一样的事情.唯一真正的区别是 -[performSelectorInBackground:withObject:] 遵循所有其他 pe
..
SO 上的帖子表明 pthread_t 是一种不透明类型,不是数字,当然也不是线程索引,您不应该直接比较 pthread_t,等等等等 问题: 为什么?是否真的打算支持没有线程数字 ID 的系统?当 pthread_t 实现只是 typedef unsigned long int pthread_t; ? 怎么样?上面一行之前有一个注释,所以它实际上是 /* 线程标识符.属
..
文件'hello'的内容是hello. $ od -tx1 -tc 你好0000000 68 65 6c 6c 6f 0a你好\n0000006 下面是我对文件“hello"进行一些更改的代码. static void *task();int main(void){国际*p;pthread_t 线程;int fd = open("你好", O_RDWR);如果 (fd 上面的代码我用了M
..
我正在尝试在 Windows C 程序上使用线程,在 Eclipse 环境和 Mingw 上编译. 我还在编译命令中添加了 -lpthread 和 -pthread,并包含在程序中. 我根据我的逻辑在适当的地方调用了 pthread_create()、pthread_cancel() 和 pthread_exit(). 它总是按预期工作,但我的程序结束说 此应用程序已请求运
..
我正在学习 pthreads 编程. 我了解到线程有两种状态:1. 可连接2. 可拆卸 Joinable 的情况下,需要调用 pthread_join 来释放资源(栈),而 detached 的情况下不需要调用 pthread_join,资源会在线程退出时释放. 我写了一个示例程序来观察行为 #include #include #include void *threadFn(v
..
此Linux杂志文章 http://www.linux-mag.com/id/792解释了与商用Unix(如Solaris)相比,Linux中实现线程的方式有所不同.总之,Linux使用用户线程到内核线程的一对一映射,而Solaris使用多对多映射.本文暗示这可能使Solaris具有性能优势,尤其是在线程之间切换时.在我花时间测试之前,有没有人做过? 解决方案 人们以前认为M:N线程是一个
..
我想通过某些函数获取线程的堆栈地址,我们可以将 pthread_self()传递给该函数.是否可以?我这样做的原因是因为我想为自己在堆栈中某个位置的线程编写分配的线程标识符.我可以在堆栈末尾附近写(堆栈末尾而不是当前堆栈地址.我们当然可以期望应用程序不会到达堆栈底部,因此要从那里开始使用空间.) 换句话说,我想使用线程堆栈在其中放置一种线程局部变量.那么,我们是否具有pthread提供的类似
..
以下有关system()的手册说,它会阻止通过system()调用运行的任何二进制程序的SIGINT和SIGQUIT信号. pthread_cancel向线程1发出SIGINT,这会杀死线程1,但不会杀死二进制应用程序. 如何进行“二进制申请"?收到SIGINT信号? 解决方案 手册页还显示: (这些信号将根据其默认值在执行命令的子进程.) 因此,请回答您的问题“如
..
这是我的主要功能,其中 NO_RECIEVERS = 3 .我正在尝试使用我发送的 i 的值来区分编写者线程和读取者线程. int main(){整数状态,i;pthread_t tr [NO_RECIEVERS],tw [NO_SENDERS],bd;i = 1;for(i = 1; i
..
我已使用以下代码创建两个线程: //头文件#include结构thread_arg{int var1;int var2;};无效* serv_com(无效* pass_arg){struct thread_arg * con = pass_arg;//与问题无关的必需语句pthread_exit(NULL);}void *cli_com(void *pass_arg){s
..