论坛首页 入门技术论坛

利用对象的等待队列和锁队列管理线程。

浏览 4240 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-18  
呵呵 楼上的你说的很形象.不过还是需要说下货这个东西和小商家以及批发市场间的运作关系. 毕竟这个批发市场不会出现同时有两个小商家在抢购同一个货的情况.
1 请登录后投票
   发表时间:2009-03-19  
fjlyxx 写道

呵呵 楼上的你说的很形象.不过还是需要说下货这个东西和小商家以及批发市场间的运作关系. 毕竟这个批发市场不会出现同时有两个小商家在抢购同一个货的情况.

大体总结一下算法过程:
初始化任务队列对象taskObject;
taskObject.AddListener(taskThreadListener1);
taskObject.AddListener(taskThreadListener2);
taskObject.AddListener(taskThreadListener3);
taskObject.AddListener(taskThreadListener4);
...
其中监听过程这样构造:
while(true)
{
if(havaTask())
{
//利用任务来驱动线程工作。
switch(Task.id)
{
  case TS1:
  taskThreadListener1.doTask();
  break;  
  case TS2:
  taskThreadListener2.doTask();
  break;   
  case TS3:
  taskThreadListener3.doTask();
  break;
  }
}
//按照某种频率执行此过程。
Sleep(1);
}

在各个监听线程中,doTaks()这样构造:
void doTask()
{
  //这个块必须是同步块。等于把任务仍给了这个线程。
  synchronized(clock)
{
  task=this.getTaskQune().popTask();
  return;
  } 
}
taskThreadListener1.run()中这样写:

while(true)
{
//如果有任务:
if(task!=NULL)
{
   work();
}
//没隔一段时间访问一次,是否有任务。
sleep(1);
}
算法结束。

终于写完了。。。




0 请登录后投票
   发表时间:2009-03-19  
错了。上面代码写的有问题。。。。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics