阅一道简单程序,了解多线程编程;

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/Ang_ie/article/details/52038854

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

int i=0;                        //定义一个全局变量,看2个线程之间都引用该变量,对该变量的影响
void* mythread1(void* d)                //创建第一个用户线程程序
{
    for(i=0;i<10;i++)
    {   
        printf("pthread1:->%c\n",*((char*)d));  //打印出数据
        sleep(2);               //睡眠延时2秒
        *((char*)d)=*((char*)d)+1;      //改变要显示的数据
    }
    return NULL;                    //返回值
}

void* mythread2(void)                   //创建第二个用户线程序
{
    for(i=0;i<15;i++)
    {
        printf("pthread2:%d\n",i);      //打印显示全局变量
        if(i==4)                //可以屏蔽,只是判断exit对程序的影响
        {
            printf("exit!!!\n");
            exit(0);
        }
        sleep(1);               //睡眠延时1秒
    }
    return NULL;
}

int main(void)
{
    pthread_t pt1,pt2;              //创建线程ID指针
    char i='1';
    if(pthread_create(&pt1,NULL,(void*)mythread1,(void*)&i))//创建线程,返回值为0则表示创建成功
    {   
        printf("Create pthread1 Error!\n");
    }
    if(pthread_create(&pt2,NULL,(void*)mythread2,NULL))//创建线程,返回值为0表示创建成功
    {   
        printf("Create pthread1 Error!\n");
    }
    printf("main:->%c\n",i);//打印出主线程中的变量值,是否被线程更改
    pthread_join(pt1,NULL);//等待线程1的结束返回值为0
    pthread_join(pt2,NULL);//等待线程2的结束返回值为0
    printf("main:->%c\n",i);//打印主线程中的值,看是否被线程更改
    return 0;
}

没有使用exit()函数的结果:
没有使用exit()函数的结果

使用了exit()函数的结果]:
使用了exit()函数的结果

猜你喜欢

转载自blog.csdn.net/Ang_ie/article/details/52038854