一个线程和互斥的例子
来源:互联网 发布:养成游戏 知乎 编辑:程序博客网 时间:2024/05/18 03:30
主函数建立两个线程,生产者和消费者,生产者使变量递增,消费者使变量递减。建立互斥区
//start from the very beginning,and to create greatness//@author: Chuangwei Lin//@E-mail:979951191@qq.com//@brief: 一个线程和互斥的例子#include <stdio.h>#include <pthread.h>//线程的头文件#include <sched.h>void *producter(void *arg);//生产者void *consumer(void *arg);//消费者int i;//缓冲区的计数值pthread_mutex_t mutex;//互斥区变量int running = 1;//线程运行控制/******************************************************函数名:main函数参数:功能:多线程,互斥*******************************************************/int main(int argc, char const *argv[]){ pthread_t producter_t;//生产者线程控制 pthread_t consumer_t;//消费者线程控制 pthread_mutex_init(&mutex,NULL);//初始化互斥 pthread_create(&producter_t,NULL,(void*)producter,NULL);//建立生产者线程 pthread_create(&consumer_t,NULL,(void*)consumer,NULL);//建立消费者线程 usleep(1);//等待线程创建完毕 running = 0;//设置线程退出值 pthread_join(producter_t,NULL);//等待生产者线程退出 pthread_join(consumer_t,NULL);//等待消费者线程退出 pthread_mutex_destroy(&mutex);//销毁互斥 return 0;}/******************************************************函数名:void *producter(void *arg)参数:功能:生产者函数,在互斥区里使变量i增加*******************************************************/void *producter(void *arg){ while(running)//没有设置退出时 { pthread_mutex_lock(&mutex);//进入互斥区 i++;//计数值增加 printf("生产者:当前总数量:%d\n",i ); pthread_mutex_unlock(&mutex);//离开互斥区 }}/******************************************************函数名:void *consumer(void *arg)参数:功能:消费者函数,在互斥区里使变量i减少*******************************************************/void *consumer(void *arg){ while(running)//没有设置退出时 { pthread_mutex_lock(&mutex);//进入互斥区 i--;//计数值减少 printf("消费者:当前总数量:%d\n",i ); pthread_mutex_unlock(&mutex);//离开互斥区 }}
用命令gcc -o mutex mutex.c -lpthread进行编译,pthread使线程函数的链接库
运行结果如下:
[scut_lcw@localhost lcw20150804]$ ./mutex生产者:当前总数量:1生产者:当前总数量:2生产者:当前总数量:3生产者:当前总数量:4生产者:当前总数量:5生产者:当前总数量:6生产者:当前总数量:7生产者:当前总数量:8生产者:当前总数量:9消费者:当前总数量:8
而且每次运行的结果都不大一样,体现了进程之间的竞争。
0 0
- 一个线程和互斥的例子
- 一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。
- 本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥
- 一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。
- Linux多线程编程(不限Linux)——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。
- pthread_mutex_init, pthread_mutex_lock, pthread_mutex_unlock,函数(线程互斥的例子)
- windows的线程互斥和同步
- 线程间的同步和互斥
- 不解的线程和互斥
- 线程的同步和互斥
- Linux线程的同步和互斥
- python 线程的同步和互斥
- 线程的互斥和同步
- 线程之间的互斥和同步
- 线程之间的互斥和同步
- 线程之间的同步和互斥
- win32 线程的互斥和同步
- 一个线程和信号量的例子
- iOS开发之OC继承、初始化方法、便利构造器
- 编写简单的内核模块及内核源码下载,内核模块Makefile编写
- 黑马程序员——Java基础--多线程(1)
- linux查看CPU及内存信息
- php调用scp脚本内网传输文件
- 一个线程和互斥的例子
- 使用CSS来设置SVG中Use元素的样式
- 一个线程和信号量的例子
- java中的IO操作
- hdoj 4753 博弈+搜索
- 使用sublime text 3 搭建轻量级C/C++编辑/编译器
- 在Node.js中使用promise摆脱回调金字塔
- NZND壳-加密算法
- 黑马程序员——C语言笔记之结构体以及枚举