ice 多线程同步范例

原创 2005年04月30日 11:09:00

#include <vector>
#include <list>
#include <IceUtil/Thread.h>
#include <IceUtil/Monitor.h>
using namespace std;
template<class T> class Queue: public IceUtil::Monitor<IceUtil::Mutex>
{
public:
    Queue() : _waitingReaders(0) {}
void put(const T & item)
{
    IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this);
    _q.push_back(item);
    if (_waitingReaders)  notify();
}
T get()
 {
    IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this);
    while (_q.size() == 0)
 {
    try
  {
   ++_waitingReaders;
   wait();
   --_waitingReaders;
  } catch (...)
  {
    --_waitingReaders;
   throw;
  }
 }
    T item = _q.front();
    _q.pop_front();
    return item;
}
private:
 list<T> _q;
 short _waitingReaders;
};


Queue<int> q;

class ReaderThread : public IceUtil::Thread
{
 virtual void run()
 {
  for (int i = 0; i < 100; ++i)cout << q.get() << endl;
 }
};
class WriterThread : public IceUtil::Thread
{
 virtual void run()
 {
  for (int i = 0; i < 100; ++i) q.put(i);
 }
};
void main()
{
 vector<IceUtil::ThreadControl> threads;
 int i;
 // Create five reader threads and start them
 //
 for (i = 0; i < 5; ++i)
 {
  IceUtil::ThreadPtr t = new ReaderThread;
  threads.push_back(t->start());
 }

 // Create five writer threads and start them
 //
 for (i = 0; i < 5; ++i)
 {
  IceUtil::ThreadPtr t = new WriterThread;
  threads.push_back(t->start());
 }
 // Wait for all threads to finish
 //
 for (vector<IceUtil::ThreadControl>::iterator p= threads.begin(); p!= threads.end(); ++p)
 {
  p->join();
 }
}

多线程同步锁的使用范例

用一个买票的例子来示范多线程操作一个对象时,同步锁的使用。 如何加锁需要认真思考。...

c++多线程同步——信号量

  • 2012年04月27日 09:44
  • 1.79MB
  • 下载

MySQL多线程同步MySQL-Transfer介绍

一、关于Transfer MySQL-Transefer(下称Transfer)是一个基于MySQL+patch后得到的主从同步工具。 其主要目的是为了解决原生版本的主从同步里,从库是单线程a...
  • softn
  • softn
  • 2016年07月21日 23:12
  • 1049

VC++多线程同步基本示例

  • 2010年03月31日 12:48
  • 7.3MB
  • 下载

java多线程同步例子

  • 2010年03月24日 10:11
  • 1KB
  • 下载

Linux操作系统多线程同步Mutex详细介绍

1. 初始化:   在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:   对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_...

C# 使用Mutex实现多线程同步实例

  • 2013年08月07日 14:59
  • 21KB
  • 下载

C++多线程同步技术(MFC)

1. 何时使用同步类     MFC 提供的多线程类分为两类:同步对象(CSyncObject、CSemaphore、CMutex、CCriticalSection 和 CEvent)和同步访问...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ice 多线程同步范例
举报原因:
原因补充:

(最多只允许输入30个字)