`

linux C 多线程编程(互斥量)实例

阅读更多

实现多线程编程下互斥地访问同一个变量!

 

参考代码:

/*************************************************************************
  > File Name: thread_exap.c
  > Author: xiao5
  > Mail: xiao5_zju@163.com 
  > Created Time: Sun 12 Jun 2016 04:19:01 PM CST
 ************************************************************************/

#include<stdio.h>
#include<pthread.h>
#include<sys/time.h>
#include<string.h>
#define MAX 10

pthread_t thread[2];
pthread_mutex_t mut;
int number = 0, i;

void *thread1()
{
	printf("Thread1: I'am thread 1\n");

	for(i = 0; i < MAX; i++)
	{
		printf("Thread1: number = %d\n", number);
		pthread_mutex_lock(&mut);
		number++;
		pthread_mutex_unlock(&mut);
		sleep(2);
	}

	printf("Thread1:主函数在等待我完成任务吗?\n");
	pthread_exit(NULL);
}

void *thread2()
{
	printf("Thread2: I'am thread2\n");

	for(i = 0; i < MAX; i++)
	{
		printf("Thread2: number = %d\n", number);
		pthread_mutex_lock(&mut);
		number++;
		pthread_mutex_unlock(&mut);
		sleep(3);
	}

	printf("Thread2: 主函数在等待我完成任务吗?\n");
	pthread_exit(NULL);
}

void thread_create(void)
{
	int temp;
	memset(&thread, 0, sizeof(thread));

	if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0)
		printf("线程1创建失败!\n");
	else
		printf("线程1创建成功!\n");

	if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0)
		printf("线程2创建失败!\n");
	else
		printf("线程2创建成功!\n");
}

void thread_wait(void)
{
	/* 等待线程结束 */
	if(thread[0] != 0)
	{
		pthread_join(thread[0], NULL);
		printf("线程1已经结束\n");
	}
	if(thread[1] != 0)
	{
		pthread_join(thread[1], NULL);
		printf("线程2已经结束\n");
	}
}


int main()
{
	pthread_mutex_init(&mut, NULL);

	printf("我是主函数哦,我正在创建线程~\n");
	thread_create();
	printf("我是主函数哦,我正在等待线程完成任务\n");
	thread_wait();

	return 0;
}

 

编译执行后的结果如下:



 

  • 大小: 92.9 KB
分享到:
评论

相关推荐

    Linux C 多线程编程之互斥锁与条件变量实例详解

    在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init. 对于动态分配的互斥量, 在申请...

    linux programming instances网络编程教程 附源代码

    全书由13章组成,内容涉及到Lindx系统编程基础、TCP/UDP协议、套接字编程概念及I/O模型、高级编程中需要用到的进程问通信同步、多路复用、多线程编程和一些高级套接字控制方法、IPv6介绍以及网络安全等。...

    Linux高性能服务器编程

    多线程编程 14.1 Linux线程概述 14.1.1 线程模型 14.1.2 Linux线程库 14.2 创建线程和结束线程 14.3 线程属性 14.4 POSIX信号量 14.5 互斥锁 14.5.1 互斥锁基础API 14.5.2 互斥锁属性 14.5.3 死锁举例 ...

    linux网络编程-宋敬彬-part3

    4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号...

    linux网络编程-宋敬彬-part2

    4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号...

    嵌入式Linux应用程序开发标准教程(第2版全)

    第9章 多线程编程 9.1 Linux线程概述 9.1.1 线程概述 9.1.2 线程机制的分类和特性 9.2 Linux线程编程 9.2.1 线程基本编程 9.2.2 线程之间的同步与互斥 9.2.3 线程属性 9.3 实验内容——“生产者消费者”实验 9.4 本...

    linux网络编程-宋敬彬-part1

    4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号...

    《精通Linux 设备驱动程序开发》.(Sreekrishnan).pdf

    更深入探讨了其他书没有涵盖或浅尝辄止的许多重要主题和关键难点,如pcmcia、i2c和usb等外部总线以及视频、音频、无线连网和闪存等驱动程序的开发,并讲解了相关的内核源码文件,给出了完整的开发实例。  本书适合...

    linux网路编程 中文 23M 版

    第2 章Linux编程环境....................................................................................................14 2.1 Linux环境下的编辑器................................................. 14 ...

    精通LINUX设备驱动程序开发

    321 15.6 atm 321 15.7 网络吞吐量 322 15.7.1 驱动程序性能 322 15.7.2 协议性能 323 15.8 查看源代码 324 第16章 linux无线设备驱动 326 16.1 蓝牙 327 16.1.1 bluez 328 16.1.2 设备实例:cf卡 329 ...

    嵌入式Linux视频教程全套2011新版-国嵌嵌入式培训下载地址

    -国嵌应用班-6-2(多线程程序设计).avi -国嵌应用班-6-3(必修实验).avi -第7天(网络编程) -国嵌应用班-7-1(Linux网络概述).avi -国嵌应用班-7-2(Linux网络编程基础).avi -国嵌应用班-7-3(TCP程序设计)....

    mini2440国嵌视频教程+课件+工具+软件+镜像+教程源码下载地址

    -国嵌应用班-6-2(多线程程序设计).avi -国嵌应用班-6-3(必修实验).avi -第7天(网络编程) -国嵌应用班-7-1(Linux网络概述).avi -国嵌应用班-7-2(Linux网络编程基础).avi -国嵌应用班-7-3(TCP程序设计)....

Global site tag (gtag.js) - Google Analytics