线程同步-互斥锁
来源:互联网 发布:unity3d 布料 仿真 编辑:程序博客网 时间:2024/05/11 13:04
在linux下,当我们需要控制对共享资源的存取的时候,可以用一种简单的加锁的方法来控制。
所谓的共享资源分为三点:
1、全局变量
2、文件操作
3、某些硬件端口
下面这个例子是对文件的操作进行加锁,
每两秒写入字符1到文件,然后读出文件中字符的长度,每次的读文件必须在写文件之后进行:
#include <stdio.h>
#include <fcntl.h>#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
char buff[10]={1};
int file_size;
int buffer_has_data=0;
pthread_mutex_t mutex;
int fd_write,fd_read;
int byte_write;
void write_buffer(void)
{
char p='1';
pthread_mutex_lock(&mutex);
if(buffer_has_data == 0)
{
fd_write=open("a.txt",O_CREAT|O_WRONLY|O_APPEND,0777);
byte_write=write(fd_write,&p,1);
buffer_has_data=1;
close(fd_write);
}
pthread_mutex_unlock(&mutex);
}
void read_buffer(void)
{
while(1)
{
pthread_mutex_lock(&mutex);
if(buffer_has_data == 1)
{
fd_read=open("a.txt",O_RDONLY);
file_size=lseek(fd_read,0,SEEK_END);
printf("The text length is %d\n",file_size);
buffer_has_data=0;
close(fd_read);
}
pthread_mutex_unlock(&mutex);
sleep(2);
}
}
int main()
{
pthread_t reader;
pthread_mutex_init(&mutex,NULL);
//write_buffer();
pthread_create(&reader,NULL,(void *)(read_buffer),NULL);
while(1)
{
write_buffer();
sleep(2);
}
return 0;
}
- 线程的同步--互斥锁
- 线程同步-互斥锁
- 线程同步之互斥锁
- Python线程同步--互斥锁
- ios互斥锁,线程同步
- linux线程同步:互斥锁
- 线程同步之互斥锁
- 线程同步—互斥锁
- 线程同步 ----互斥锁
- 线程同步1 ------ 互斥锁
- 线程同步--线程同步--线程同步--线程同步--线程同步
- 64 互斥锁 线程通信 线程同步
- Linux 线程同步之一:互斥锁
- Linux线程同步之互斥锁
- linux线程同步之互斥锁
- Linux 线程同步之一:互斥锁
- 线程间同步机制----互斥锁
- 线程同步——互斥锁
- C/C++ 直接使用动态库 dlopen
- Jsp基础入门
- TOJ2671 01-package
- 关于LSA的相关学习---短文本聚类涉及到的知识,一种主题模型(原载于我的百度空间)
- Linux Netfilter实现机制和扩展技术
- 线程同步-互斥锁
- 数据结构与算法第一张总结
- Uva10601 立方体 置换
- 什么是IO
- GDB + CoreDump 调试记录
- cocos2d-x 使用断言
- java.lang.OutOfMemoryError: Java heap space解决方法
- 如何自己制作MyEclipse序列号
- Java基础<十>---> String类