linux中多线程POSIX

21 篇文章 0 订阅

1、

创建线程

 pthread_create(&tid,NULL,thr_fun,"1");
 sleep(1);

编译与执行:

编译:gcc 01.c -o 01 -lpthread

执行:./01

允许结果:

2、等待指定id线程结束

 pthread_join(tid,&rval);

 

01.h

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void* thr_fun(void* arg){
        char* no = (char*)arg;
        int i=0;
        for(;i<10;i++){
                printf("%s thread,i:%d \n",no,i);
                if(i==5){
                 //线程退出
                  pthread_exit(2);
                }
        }
        return 1;
}
void main(){
        printf("main thread\n");
        //线程id
        pthread_t tid;
        pthread_create(&tid,NULL,thr_fun,"1");
        //sleep(1);
        void* rval;

        //等待tid线程结束
        pthread_join(tid,&rval);
        printf("rval:%d \n",rval);
}

 

3、多线程操作同一数据引起的数据混乱

 

01.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

int i=0;

void* thr_fun(void* arg){
        char* no = (char*)arg;
        for(;i<10;i++){
                printf("%s thread,i:%d \n",no,i);
                sleep(1);
        }
        i=0;
}
void main(){
        pthread_t tid1, tid2;
        pthread_create(&tid1,NULL,thr_fun,"No1");
        pthread_create(&tid1,NULL,thr_fun,"No2");


        //等待线程结束
        pthread_join(tid1,NULL);
        pthread_join(tid2,NULL);
}

运行后两个线程操作了相同的数据i

 

4、互斥锁

pthread_mutex_t mutex

01.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

int i=0;
//互斥锁
pthread_mutex_t mutex;

void* thr_fun(void* arg){
        //加锁
        pthread_mutex_lock(&mutex);
        char* no = (char*)arg;
        for(;i<5;i++){
                printf("%s thread,i:%d \n",no,i);
                sleep(1);
        }
        i=0;
        //解锁
        pthread_mutex_unlock(&mutex);
}
void main(){
        pthread_t tid1, tid2;

        //初始化互斥锁
        pthread_mutex_init(&mutex,NULL);

        pthread_create(&tid1,NULL,thr_fun,"No1");
        pthread_create(&tid2,NULL,thr_fun,"No2");


        //等待线程结束
        pthread_join(tid1,NULL);
        pthread_join(tid2,NULL);
}

线程2运行完后线程1开始运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值