多线程程序设计

一、线程的概念
    1.线程就是“轻量级”的进程。
     2. 线程不创建新的代码段以及数据段,与创建它的进程共享数据段以及代码段。
      3.线程拥有自己独立的
二、线程的函数学习
         1.创建新线程        
          int pthread_create(pthread_t *thread,const pthread_attr_t* attr,void*(*start_toutine)(void*),void *arg)
        gcc -lpthread    在编译时需要使用该库
        <pthread.h>    在编译时,必须链接pthread库

     函数的功能
                         创建一个新的线程
     返回值
                成功:返回 0
                失败:返回错误编码
    参数:
                thread :新创建的线程的ID
               attr:待创建线程是属性,一般为NULL
               start_routine:线程要执行的入口函数
              arg:线程入口函数的参数可以为空
       2.等待线程结束
            int    pthread_jion(pthread_t thread,void** reval);
          函数功能:
                             用于等待线程的结束
           返回值:
                         成功:返回0
                         失败:返回错误的编号  
            参数:
                     pthread:要等待的线程结束的ID
                        reval:保存线程退出时的状态,一般为NULL
    3.退出线程  
                          void pthread_exit(void *retval)
             函数功能结束线程,不能使用exit(),因为exit()将调用线程的进程也退出了,所以不能使用exit()
               返回值:
               参数:保存返回值
三、线程的互斥
           线程互斥:在实际应用中,多个线程往往会访问同一数据或资源,为了避免线程之间的相互影响,需要引入线程互斥机制,而互斥锁是互斥中的一种。
           
          1.初始化互斥锁
                               pthread_mutex_init();
          2.获取互斥锁
                            pthread_mutex_lock();
         3.释放互斥锁
                             pthread_mutex_unlock();


 四 、线程的互斥实例  
  
  
#include <pthread.h>
 
#include<stdio.h>
#include<unistd.h>
 
pthread_t thread[2];
 
int number=0;
 
/*定义一个互斥锁*/
 
pthread_mutex_t mux;
 
void* work1()
{
 
int i=0;
printf("i am worker1\n");
for(i=0;i<10;i++)
{
pthread_mutex_lock(&mux);
number++;
pthread_mutex_unlock(&mux);
printf("woker1 number is %d\n",number);
sleep(1);
}
pthread_exit(NULL);
 
}
 
void* work2()
{
 
int i=0;
printf("i am worker2\n");
for(i=0;i<10;i++)
{
pthread_mutex_lock(&mux);
number++;
pthread_mutex_unlock(&mux);
printf("woker2 number is %d\n",number);
sleep(1);
}
pthread_exit(NULL);
 
 
 
}
 
void main()
{
 
/*在主进程中完成互斥锁的初始化*/
pthread_mutex_init(&mux,NULL);
 
 
 
//1.创建工人1线程
pthread_create(&thread[0],NULL,work1,NULL);
//2.创建工人2线程
pthread_create(&thread[1],NULL,work2,NULL);
//3.等待工人1线程结束
pthread_join(thread[0],NULL);
//4.等待工人2线程结束
pthread_join(thread[1],NULL);
 
 
 
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值