线程同步-互斥锁

来源:互联网 发布: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;
}
原创粉丝点击