多线程编程整理

多线程编程
1,对比多线程与多进程
     启动新进程的开销比新线程大很多,进程切换开销也大于线程切换;
     线程间的通信比进程间通信方便,但线程间需要同步共享数据。
2,以pthread为例介绍多线程编程
     创建工作线程函数:
void *thread(void *ptr)
{
for(int i = 0; i < 5;i++) {
sleep(10);
cout << "This is a pthread." << endl;
}
return 0;
}

主函数:
int main() {
pthread_t id;//新建线程的标识符
int ret = pthread_create(&id, NULL, thread, NULL);
if(ret) {
cout << "Create pthread error!" << endl;
return 1;
}
for(int i = 0;i < 5;i++) {
cout << "This is the main process." << endl;
sleep(10);
}
pthread_join(id, NULL);
return 0;

因为CPU为不同线程分配时间片,上面的执行结果可能不一样。

3,函数pthread_create
     第二个参数可以设置线程属性,第四个参数设置运行函数的参数。
     线程属性结构为pthread_attr_t,需要通过相关api函数设置,属性内容有:是否绑定、是否分离、堆栈大小和优先级。
4,线程数据
     在单线程里,有两种基本数据:全局变量和局部变量。在多线程里,多了线程数据(TSD),这种数据在线程内部类似全局数据,所有函数都可以访问,在其它线程不可见。
     需要为每个线程数据创建一个键,在线程内部,代表同样的内容,在不同线程里,数据是不一样的。
     有相关API函数创建和使用:创建一个键;为键指定线程数据;从键读取线程数据;删除键。
5,同步对象互斥锁
     锁定和解锁
6,条件变量
     阻塞线程并等待其它线程发送信号,常和互斥锁一起使用
7,信号量
     非负的整数计数器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值