linux c多线程开发实例,Linux c多线程编程的4个实例

本文介绍了Linux系统中多线程的实现,通过LinuxThreads库展示了如何创建线程、设置线程属性以及使用互斥锁进行资源保护。示例代码详细演示了线程的构建、退出、等待句柄结束和获取返回值的过程,以及如何修改线程的分离属性。同时,还探讨了在多线程环境中如何使用互斥锁确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

img_0_3228260566_3413619462_27.jpg

在主流的操作系统中c 多线程控制控件实例,多任务通常都提供了进程和线程两种推动方法,进程享有独立的进程空间c 多线程控制控件实例,而线程相对于进程来说是一种更加轻量级的多任务并行,多线程之间通常都是共享所在进程的内存空间的。

Linux也不例外,虽然从内核的视角来看,线程表现为一种对进程的"克隆"(clone),共享进程的资源。但是在客户空间提供了线程管理制度来推动对线程的管控,目前Linux中最流行的线程模式为LinuxThreads,下面以一个多线程编程示例来介绍该泛型库的编程接口:

示例1:线程的构建和退出,等待句柄结束和获取线程的返回值

#include

#include

#include

/************************************************************

*线程变量:线程运行执行的变量

*参数p:通用类型的指针,启动线程时释放给线程变量的参数

*返回值:通用类型指针,线程结束后开启线程的变量可以获取该值

*************************************************************/

void* task(void* p){

double r = *(double*)p;

printf("%lf\n",3.14*r*r);

}

void* task2(void* p){

v2-a653fbcd7d402bd22cd88ad370ce5c58_b.jpg

static int sum = 0;

int i;

for(i=1;i

sum = sum+i;

return ∑

//pthread_exit(&sum);线程退出,和return等价

}

int main(){

pthread_t id1,id2;

double d = 1.0;

int* pi = NULL;

/*

*创建线程函数,在主句柄中读取该变量可以构建线程

*参数1:线程ID,ID由平台分配,该参数是一个传出参数,类型为pthread_t *

*参数2:线程属性,使用默认属性给0即可,类型为pthread_attr_t *

*参数3:线程变量,即句柄运行时代码,类型为void *(*)(void *)

1bad52affada63d39cbf5f5a2fc6c17f.png

*参数4:传递给线程变量的参数

*/

pthread_create(&id1,0,task,&d);//计算圆的面积

pthread_create(&id2,0,task2,0);//计算累加和

/*

*等待句柄结束数组,用于在一个线程中期待另外一个线程结束

*参数1:要期待结束的线程的ID

*参数2:结束线程的返回值的地址(由于是传出参数,所以是返回值的地址)

*/

pthread_join(id1,0);

pthread_join(id2,(void**)&pi);//pi=∑

printf("sum=%d\n",*pi);

return 0;

}

此外,我们还可以修改线程的属性,下面介绍修改线程分离属性的代码

示例2:设置线程的分离属性

c956e282443b447a6202a65f7b654c87.png

#include

#include

//线程函数

void* task(void* p){

int i;

for(i=0;i

printf("%d\n",i);

usleep(100000);//0.1秒

}

}

int main(){

pthread_t id;

pthread_create(&id,0,task,0);

/*

*将线程修改为分离属性,分离属性的线程如果结束,直接回收资源

*因此当线程修改为分离属性后将能够再期待线程结束和获得线程的返回值

09562q1j-1.gif

*参数:设置分离属性的线程ID

*/

pthread_detach(id);//detach的线程join

//pthread_join(id,0);//无效

int i;

for(i=0;i

printf("main:%d\n",i);

usleep(100000);//0.1秒

}

}

由于多线程之间是共享进程资源的,所以多线程编程时必须对共享资源的访问进行保护

包括互斥和同步,常用的方法比如互斥锁和信号量

示例3:互斥锁的使用

#include

#include

char* data[5];//定义一个长度是5字符串数组

int size = 0;//定义了当前下标,也是人数

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-124222-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值