关于互斥锁的问题!

ryangio 2010-04-21 09:13:34
以下是书上的一个例子:
请问大侠互斥体和缓冲区BUFFER是个怎样的关系?


#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <linux/unistd.h>

char buffer[128];
int buffer_has_data = 0;
pthread_mutex_t mutex;

void write_buffer(char *data)
{
pthread_mutex_lock(&mutex);//加锁
if (buffer_has_data == 0)
{
sprintf(buffer, "%s", data);
buffer_has_data = 1;
}
pthread_mutex_unlock(&mutex);//解锁
}

void read_buffer(void)
{
while (1)
{
pthread_mutex_lock(&mutex);//对互斥体加锁
if (buffer_has_data == 1)
{
printf("Read buffer data = %s\n", buffer);
buffer_has_data = 0;
}
pthread_mutex_unlock(&mutex);//对互斥体解锁
sleep(1);
}
}

int main(int argc, char *argv[])
{
char input[128];
pthread_t reader;
pthread_mutex_init(&mutex, NULL);//初始化一个互斥对象
pthread_create(&reader, NULL, (void *)read_buffer, NULL);//创建一个线程
while (1)
{
scanf("%s", input);
write_buffer(input);
}
return 0;
}
...全文
114 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Segra2016 2010-04-21
  • 打赏
  • 举报
回复
这里有一个缓冲区buffer,俩个函数:write_buffer(往buffer里面写数据)和read_buffer(从缓冲区读数据)
由于某些缓冲区(譬如文件)是不能同时读和写的(多线程会存在这个问题),所以我们就要解决这样的一个问题:读的时候不写,写的时候不读。。
我们用一个互斥体可以解决这个问题,入口函数main中首先创建一个互斥体,当调用write_buffer时,在使用到buffer的代码之前,要确定buffer没有被read_buffer操作(他们是互斥关系撒),并lock之,告诉别人buffer我已经在用,哥么你等等,等我用完了我会unlock的,那时候别人就可以用了..
cy330206 2010-04-21
  • 打赏
  • 举报
回复
顶,,随便了学
xinzaiyiqi 2010-04-21
  • 打赏
  • 举报
回复
不懂,帮顶
ryangio 2010-04-21
  • 打赏
  • 举报
回复
恩。。谢谢
localxiao 2010-04-21
  • 打赏
  • 举报
回复

[code=C/C++]
// 这里贴代码

[/code]
localxiao 2010-04-21
  • 打赏
  • 举报
回复
举个例子:

有一部无绳电话,通话必须通过座机,座机在同一时间只能接受一个子机服务

A 和 B 都要用电话,但是A B 都不确定对方什么时候要使用

如果任意一个人在用电话

在这个人通话过程中,如果另外一个人也打电话,座机检测有人在打电话,于是座机不接受申请

在过程,互斥锁就相当于这个检测过程,座机就相当于那个buf缓冲区(大家都要用的共同资源)

不知道这样说明白不明白


69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧