linux c多线程编程实例代码

 更新时间:2013年11月20日 16:03:17   作者:  
这篇文章主要介绍了linux系统中的c多线程编程实例,大家可以参考使用以下代码

直接看代码吧,代码里有注释

复制代码 代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
#define MAX 3

int number =0;
pthread_t id[2];
pthread_mutex_t mut; //初始化静态互斥锁

void thread1(void)
{
    int i;
    printf("Hello,I am pthread1!\n");
    for (i=0; i<MAX; i++)
    {
        pthread_mutex_lock(&mut);  //此处上锁,保证number的唯一性
            number ++;  
            printf("Thread1:number = %d\n",number);
        pthread_mutex_unlock(&mut);
        sleep(1);  //linux c下 sleep(minute),里面变量单位是分钟
    }
    pthread_exit(NULL); //线程通过执行此函数,终止执行。返回是一个空指针类型
}

void thread2(void)
{
    int j;
    printf("Hello,I'm pthread2\n");
    for(j=0; j<MAX; j++)
    {
        pthread_mutex_lock(&mut);
             number ++;
             printf("Thread2:number = %d\n",number);
        pthread_mutex_unlock(&mut);
        sleep(1);
    }
    pthread_exit(NULL);
}

void thread_create(void)
{
    int temp;
    memset(&id, 0, sizeof(id));
if(temp = pthread_create(&id[0], NULL, (void *)thread1, NULL)!= 0)
                          //参数:线程标识符指针 线程属性  线程运行函数起始地址  运行函数属性
                          //创建成功返回 0
        printf("Thread 1 fail to create!\n");
    else
        printf("Thread 1 created\n");
    if(temp = pthread_create(&id[1], NULL, (void *)thread2, NULL)!= 0)
        printf("Thread 2 fail to create!\n");
    else
        printf("Thread 2 created!\n");
 }  
void thread_wait()
{
    if(id[0] != 0)
    {
        pthread_join(id[0], NULL); //等待线程结束,使用此函数对创建的线程资源回收
        printf("Thread1 completed!\n");
    }
    if(id[1] != 0)
    {
        pthread_join(id[1], NULL);
        printf("Thread2 completed!\n");
    }
}
int main(void)
{
int i,ret1,ret2;
pthread_mutex_init(&mut, NULL); //动态互斥锁
    printf("Main fuction,creating thread...\n");
    thread_create();
    printf("Main fuction, waiting for the pthread end!\n");
    thread_wait();
    return (0);
}

相关文章

  • C语言如何计算两个数的最小公倍数

    C语言如何计算两个数的最小公倍数

    这篇文章主要介绍了C语言如何计算两个数的最小公倍数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C++万能库头文件在vs中的安装步骤(图文)

    C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 在C++中实现云端存储变量的操作步骤

    在C++中实现云端存储变量的操作步骤

    随着云计算技术的快速发展,现在我们可以将数据存储在云端,以便于在不同设备和地点访问,在C++中,我们也可以通过一些方法来实现这个功能,本文将详细介绍如何在C++中实现云端存储变量,需要的朋友可以参考下
    2023-11-11
  • C++输入输出重定向方法示例

    C++输入输出重定向方法示例

    这篇文章主要给大家介绍了关于C++输入输出重定向的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • c++基础算法动态DP解决CoinChange问题

    c++基础算法动态DP解决CoinChange问题

    这篇文章主要为大家介绍了c++基础算法如何利用动态DP来解决Coin Change的问题示例过程,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • C语言函数封装及变量的作用域

    C语言函数封装及变量的作用域

    这篇文章主要介绍了C语言函数封装及变量的作用域,以及分享一些字符串的相关实战练习,字符串转整数、整数转字符串、浮点数转字符串、字符串转浮点数、判断平年闰年、技术字符串长度等等。下文详细内容需要的小伙伴可以参考一下
    2022-05-05
  • C++泛型算法的一些总结

    C++泛型算法的一些总结

    以下是对C++中的泛型算法进行了总结介绍。需要的朋友可以过来参考下
    2013-08-08
  • 一文教你快速了解C语言中的作用域和常量

    一文教你快速了解C语言中的作用域和常量

    作用域(scope)是程序设计概念,通常来说一段程序代码中所用到的名字并不总是有效/可用,下面这篇文章主要给大家介绍了关于如何快速了解C语言中的作用域和常量的相关资料,需要的朋友可以参考下
    2023-06-06
  • C语言多线程服务器的实现实例

    C语言多线程服务器的实现实例

    这篇文章主要介绍了C语言多线程服务器的实现实例,文章用实例讲解的很清楚,有对这方面不太懂的同学可以参考下
    2021-02-02
  • C++中常量与指针的示例详解

    C++中常量与指针的示例详解

    在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的,所以这篇文章主要给大家介绍了关于C++中常量与指针的相关资料,需要的朋友可以参考下
    2021-06-06

最新评论