线程同步问题

zl811103 2009-09-16 08:10:55
加精
我想让两个线程循环执行,也就是线程1执行线程2刮起,线程1执行完毕挂起,线程2启动,线程2执行完毕挂起,线程1执行,如此循环,如何实现?
...全文
1457 129 打赏 收藏 转发到动态 举报
写回复
用AI写文章
129 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2009-10-05
  • 打赏
  • 举报
回复
一个线程足够了,如果想进行逻辑分离,建议用纤程(Fiber).
xuanner 2009-10-05
  • 打赏
  • 举报
回复
线程同步有四种方法处理,分别是:
1.互斥锁------用CreateMetux函数[一对一的线程通信]
2.信号量------用CreateSemphore函数[一对多的线程通信]
3.事件------用CreateEvent函数[事件线程通信]
4.条件变量------就是用外部全局变量啦![公用的]
angeling2009 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 haiandj 的回复:]
建议自己做个控制程序,控制他们交替,最好不要放任线程
[/Quote]
好久不见 我最近也要开始研究线程的这个可恶的东西了。。。
sczyq 2009-09-24
  • 打赏
  • 举报
回复
只需采用一公共变量控制即可,不符合条件时空转即可。

网际飞蚁 2009-09-24
  • 打赏
  • 举报
回复
可以使用互斥量来做,或者使用临界区(系统开销小,不能在不同进程互斥)也可以!
线程A:
hThreadCommandMutex = CreateMutex(NULL,false,"Thread_Command_Mutex");
while(!Terminated)
{
dwResult = WaitForSingleObject(hThreadCommandMutex,INFINITE);
if(dwResult != WAIT_OBJECT_0)
{
//系统崩溃
break;
}
DoSomethingA();
ReleaseMutex(hThreadCommandMutex);
}
CloseHandle(hThreadCommandMutex);
线程B:
hThreadCommandMutex = CreateMutex(NULL,false,"Thread_Command_Mutex");
while(!Terminated)
{
dwResult = WaitForSingleObject(hThreadCommandMutex,INFINITE);
if(dwResult != WAIT_OBJECT_0)
{
//系统崩溃
break;
}
DoSomethingB();
ReleaseMutex(hThreadCommandMutex);
}
CloseHandle(hThreadCommandMutex);
yuanwenqun2 2009-09-21
  • 打赏
  • 举报
回复
应该就是uc/os里头讲的那样,信号量就可以了吧
zhl3597 2009-09-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 feiyongxihua 的回复:]
哈哈哈哈哈哈哈哈哈哈哈

[/Quote]同意,线程太容易出错了
WEED1234567 2009-09-20
  • 打赏
  • 举报
回复
Mylovesting 2009-09-20
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 lemonash2007 的回复:]
WaitForSingleObject可以满足  查查WaitForSingleObject的用法
[/Quote]
推荐这个
体验太差 2009-09-20
  • 打赏
  • 举报
回复
这样的模型可以不:

ThreadA :

while(true)
{
doSomeThing();
notify(signalB)
wait(signalA);
}

ThreadB :

while(true)
{
doSomeThing();
notify(signalA)
wait(signalB);
}

这个可行,我们的项目就是使用这个模型的,不过在嵌入式OS中。
nichonas 2009-09-20
  • 打赏
  • 举报
回复
谢谢,谢谢楼主提供

solarwindsj 2009-09-19
  • 打赏
  • 举报
回复
程序员啊,去补习一下计算机科学基础知识再出来混吧。
追光的猫 2009-09-19
  • 打赏
  • 举报
回复
我在书上看到了,大概是这个样子
public class Test(){
new MyThread(1).start();
new MyThread(2).start();
}
class MyThread extends Thread(){
private i = 0;
static Object washroom = new Object();

private MyThread(int i){
this.i = i;
}

public void run(){
synchronized(washroom){ //轮流获得washroom的锁
try{
if(i == 1){
brush();
washroom.wait();
washroom.notify();
}else{
brush();
washroom.notify();
washroom.wait();
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
}

}
wenchang9999 2009-09-19
  • 打赏
  • 举报
回复
找程序开发高手,测试设备方面的,要有独立完成项目的能力,可联系0755-29053456,单小姐
ck_se7en 2009-09-19
  • 打赏
  • 举报
回复
同意90楼的
kj111111 2009-09-19
  • 打赏
  • 举报
回复
学习学习。。。。。。。。。
hankuo 2009-09-19
  • 打赏
  • 举报
回复
VB.net 2005 的多线程功能怎样?实时性强吗?
gao337536127 2009-09-19
  • 打赏
  • 举报
回复
路过
建议楼主在linux下开发
很简单
gao337536127 2009-09-19
  • 打赏
  • 举报
回复
路过
但建议楼主在linux下开发
很简单的哦
hujun_zero 2009-09-19
  • 打赏
  • 举报
回复
线程标志位
加载更多回复(107)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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