linux多线程编程linux单进程如何实现多核cpu多线程分配?

linux多线程编程  时间:2020-12-30  阅读:()

在Linux环境下,对一个设备文件进行多线程读写(两个线程就行),求大神给一个简单的程序。

配置文件为 conf.txt 测试代码如下,注意链接的时候加上 -lpthread 这个参数 #include <stdio.h> #include <errno.h> //perror() #include <pthread.h> #include <unistd.h> //sleep() #include <time.h> // time() #include <stdlib.h> //rand() #define FD "conf.txt" typedef void *(*fun)(void *); struct my_struct { unsigned time_to_wait; int n; }; void *test_thread(struct my_struct *); int main (int argc, char const *argv[]) { FILE *fp = fopen(FD, "r"); if (fp == NULL) { perror(FD); return -1; } srand((unsigned)time(NULL)); //初始化随机种子 int thread_count; fscanf(fp, "%d", &thread_count); fclose(fp); if (thread_count <= 0) { printf("线程数<1,退出程序。

"); return -1; } pthread_t *ptid = (pthread_t *)malloc(sizeof(pthread_t) * thread_count); //保存线程ID int i; for (i = 0; i < thread_count; i++) { int tw = rand() % thread_count + 1; //随机等待时间 struct my_struct * p = (struct my_struct *)malloc(sizeof(struct my_struct)); if (p == NULL) { perror("内存分配错误"); goto ERROR; } p->time_to_wait = tw; p->n = i + 1; int rval = pthread_create(ptid + i, NULL, (fun) test_thread, (void *)(p)); //注意这里的强制转换(两个) if (rval != 0) { perror("Thread creation failed"); goto ERROR; } //sleep(1); //这句加也可以,不加也可以。

最开始的时候加上这个是为了让两个线程启动的时候之间有一定的时间差 } printf("主线程启动 "); fflush(stdout); for (i = 0; i < thread_count; i++) { pthread_join(*(ptid + i), NULL); //等待所有线程退出。

} printf(" 主线程退出 "); ERROR: free(ptid); return 0; } void *test_thread(struct my_struct * p) //线程启动的时候运行的函数 { printf("第%d个线程启动,预计运行%d秒 ", p->n, p->time_to_wait); fflush(stdout); sleep(p->time_to_wait); //让线程等待一段时间 printf("第%d个线程结束 ", p->n); fflush(stdout); free(p); return NULL; } 你的第二个问题我在百度HI回你了~

在Linux下用C++创建新线程

#include <stdio.h> #include <pthread.h> #include <stdlib.h> void* thread(void* arg) { printf ("The child process... "); } int main(int argc, char *argv[]) { pthread_t id; int i,ret; ret=pthread_create(&id,NULL,(void *)thread,NULL); if(ret!=0) { printf ("Create pthread error! "); exit (1); } } 程序如上就可以编译。

它属于linux下C编程中多线程编程的范围。

用命令 -lpthread 1.c -o 1 ./1 就可以出结果。

多线程编程的基础可以参考 /huifeng00/blog/item/ed13ddc0d6c59c170ff47715.html

最近在学linux中多线程编程,发现很多函数参数为void *retval,这是什么意思啊,是说retval这个指针是指向

这个一般是用来返回结构体指针的 结构体是没有确定类型的 多线程里面的参数也是void * arg 这样的话 更通用 你可以传任意类型 也可以返回任意类型 但是要做强制类型转换

linux单进程如何实现多核cpu多线程分配?

linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主要有2个方法 1:利用linux系统自己的线程切换机制,linux有一个服务叫做irqbalance,这个服务是linux系统自带的,默认会启动,这个服务的作用就是把多线程平均分配到CPU的每个核上面,只要这个服务不停止,多线程分配就可以自己实现。

但是要注意,如果线程函数内部的有某个循环,且该循环内没有任何系统调用的话,可能会导致这个线程的CPU时间无法被切换出去。

也就是占满CPU现象,此时加个系统调用,例如sleep,线程所占的CPU时间就可以切换出去了。

2:利用pthread库自带的线程亲和性设置函数,来设置线程在某个CPU核心上跑,这个需要在程序内部实现。

同时注意不要和进程亲和性设置搞混淆了 int?pthread_setaffinity_np(pthread_t?thread,?size_t?cpusetsize, const?cpu_set_t?*cpuset); int?pthread_getaffinity_np(pthread_t?thread,?size_t?cpusetsize,? cpu_set_t?*cpuset); 从函数名以及参数名都很明了,唯一需要点解释下的可能就是cpu_set_t这个结构体了。

这个结构体的理解类似于select中的fd_set,可以理解为cpu集,也是通过约定好的宏来进行清除、设置以及判断: //初始化,设为空 void?CPU_ZERO?(cpu_set_t?*set);? //将某个cpu加入cpu集中? void?CPU_SET?(int?cpu,?cpu_set_t?*set);? //将某个cpu从cpu集中移出? void?CPU_CLR?(int?cpu,?cpu_set_t?*set);? //判断某个cpu是否已在cpu集中设置了? int?CPU_ISSET?(int?cpu,?const?cpu_set_t?*set);

racknerd:美国大硬盘服务器(双路e5-2640v2/64g内存/256gSSD+160T SAS)$389/月

racknerd在促销美国洛杉矶multacom数据中心的一款大硬盘服务器,用来做存储、数据备份等是非常划算的,而且线路还是针对亚洲有特别优化处理的。双路e5+64G内存,配一个256G的SSD做系统盘,160T SAS做数据盘,200T流量每个月,1Gbps带宽,5个IPv4,这一切才389美元...洛杉矶大硬盘服务器CPU:2 * e5-2640v2内存:64G(可扩展至128G,+$64)硬...

选择Vultr VPS主机不支持支付宝付款的解决方案

在刚才更新Vultr 新年福利文章的时候突然想到前几天有网友问到自己有在Vultr 注册账户的时候无法用支付宝付款的问题,当时有帮助他给予解决,这里正好顺带一并介绍整理出来。毕竟对于来说,虽然使用的服务器不多,但是至少是见过世面的,大大小小商家的一些特性特征还是比较清楚的。在这篇文章中,和大家分享如果我们有在Vultr新注册账户或者充值购买云服务器的时候,不支持支付宝付款的原因。毕竟我们是知道的,...

knownhost西雅图/亚特兰大/阿姆斯特丹$5/月,2个IP1G内存/1核/20gSSD/1T流量

美国知名管理型主机公司,2006年运作至今,虚拟主机、VPS、云服务器、独立服务器等业务全部采用“managed”,也就是人工参与度高,很多事情都可以人工帮你处理,不过一直以来价格也贵。也不知道knownhost什么时候开始运作无管理型业务的,估计是为了扩展市场吧,反正是出来较长时间了。闲来无事,那就给大家介绍下“unmanaged VPS”,也就是无管理型VPS,低至5美元/月,基于KVM虚拟,...

linux多线程编程为你推荐
软银巨亏阿里巴巴上市怎样影响中国软银支付烧钱,玩家多,生态复杂,印度的移动支付大战有多火爆杀毒软件哪个好杀毒软件哪个好用燃气热水器和电热水器哪个好燃气热水器和电热水器哪个好燃气热水器和电热水器哪个好燃气热水器好还是电热水器好?录音软件哪个好手机录音软件哪个好用手机管家哪个好手机管家哪个软件好360云盘360云盘和微云那个好用?360云盘下载速度慢怎么办360网盘下载速度好慢,我这几天下载怎么才30多KB。月抛隐形眼镜哪个牌子的月抛隐形眼镜戴起来比较舒服?请推荐
中国域名网 免费网站监控 info域名 evssl 上海服务器 国外ip加速器 吉林铁通 闪讯官网 空间首页登陆 服务器是干什么用的 韩国代理ip 秒杀品 新加坡空间 中国电信测速网站 工信部网站备案查询 服务器防火墙 免费蓝钻 美国迈阿密 电信宽带测速软件 netvigator 更多