请教:linux多线程同步问题

StarOfFuture 2010-04-18 07:36:43
linux下如何对一个缓冲区进行读写控制呢?我有两个线程,一个读缓冲区,一个写缓冲区。下面是一个程序的大致流程:

write()
{
for(; ; )

writedata(buffer);
}

read()
{
for( ; ; )
data = getdata(buffer);
}
main()
{
pthread_create(thread1,NULL,(void*)write);
pthread_create(thread2,NULL,(void*)read);

}
如何实现这两个线程的互斥访问呢?读线程只有在写完数据后才能获取数据,写线程只能在读完数据才能再写数据,也就是两个线程交替运行。我的想法是用一个互斥锁,不知道能解决问题吗?望各位指点一下!
...全文
201 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小魔菇 2010-04-19
  • 打赏
  • 举报
回复
线程之间可以用mutex
小魔菇 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dxmlovexy 的回复:]

信号量就是针对线程的吧?
[/Quote]
线程和进程都可以用
StarOfFuture 2010-04-19
  • 打赏
  • 举报
回复
结贴了
StarOfFuture 2010-04-19
  • 打赏
  • 举报
回复
6楼 有见地
用互斥锁可行,我已经解决了
为加快速度,可用一个环形缓冲区实现
dxmlovexy 2010-04-18
  • 打赏
  • 举报
回复
信号量就是针对线程的吧?
StarOfFuture 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 benbshmily 的回复:]
C/C++ code
write()
{
for(; ; )
{
sem_wait(semaphore);
writedata(buffer);
sem_post(semaphore);
}
}

read()
{
for( ; ; )
{
sem_wait(semaphore);
data = getdata(buffer);
s……
[/Quote]
这是用的信号量,一般用于进程间的通信。线程之间的通信用这个可以吗?
benbshmily 2010-04-18
  • 打赏
  • 举报
回复
write()
{
for(; ; )
{
sem_wait(semaphore);
writedata(buffer);
sem_post(semaphore);
}
}

read()
{
for( ; ; )
{
sem_wait(semaphore);
data = getdata(buffer);
sem_post(semaphore);
}
}


不知道这样能不能满足你要求;
StarOfFuture 2010-04-18
  • 打赏
  • 举报
回复
在下等待中。。。。

18,772

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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