线程控制

线程控制:

线程的控制与进程控制不同,由于内核中根本没有写出的概念,因此也就不存在线程相关的“系统调用”,于是大佬在用户层封装了一个线程库,我们就可以在用户层来完成线程的创建,销毁以及其他控制

posix线程库:

  • 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都以“pthread_”开头
  • 要使用这些函数库,要提高引入头文件<pthread.h>
  • 链接这些线程函数库时要使用编译器的“-lpthread”选项

1.创建线程:
原型:

int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void*),void *arg);

参数:

  • pthread:返回线程ID
  • attr:设置线程的属性,attr为NULL表示使用默认属性
  • start_routine:是个函数的地址,线程启动后要执行的函数
  • arg:传给线程启动函数的参数

返回值:成功返回0,失败返回错误码

错误检测:

  • 传统的一些函数是,成功返回0,失败返回-1,并且对全局变量erron复制以指示错误
  • pthreads函数出错时,不会设置全局变量errno(而其他大部分POSIX函数会这样做),而是将错误代码通过返回值返回
  • pthreads同样提供了线程内的errno变量,以支持其他使用errno的代码,对于pthreads函数的错误,建议通过返回值判定,因为读取返回值要不读取线程内的errno变量的开销小

测试代码:

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<stdlib.h>
  4 #include<string.h>
  5 #include<pthread.h>
  6 
  7 void *thread_run(void *arg)//线程入口函数
  8 {
  9     while(1)
 10     {
 11         printf("I am thread 1\n");
 12         sleep(2);
 13     }
 14 }
 15 
 16 int main()
 17 {
 18     pthread_t tid;//无符号长整形
 19     int ret = pthread_create(&tid,NULL,thread_run,"thread 1");
 20     //主线程的执行
 21     while(1)
 22     {
 23         printf("I am main thread\n");
 24         sleep(1);
 25     }
 26     return 0;
 27 }

运行结果如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值