快速业务通道

探索Java同步机制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
essages = MAX_MESSAGES);    virtual ~Message_Queue();    // Put the <Message> at the tail of the queue.    // If the queue is full, block until the queue is not full.    /* synchronized */    void put (const Message &msg);    // Get the <Message> from the head of the queue    // and remove it. If the queue is empty, block until the queue is not empty.    /* synchronized */    Message get();    // True if the queue is empty, else false.    /* synchronized */    bool empty () const;    // True if the queue is full, else false.    /* synchronized */    bool full () const; private:    // Put the <Message> at the tail of the queue, and    // get the <Message> at its head, respectively.    // Note that, the internal methods are not synchronized.    void put_i (const Message &msg);    Message get_i ();    // True if the queue is empty, else false.    bool empty_i () const;    // True if the queue is full, else false.    bool full_i () const; private:    // Internal Queue representation omitted, could be a    // circular array or a linked list, etc.. ...    // Current number of <Message>s in the queue.    size_t message_count_;    // The maximum number <Message>s that can be    // in a queue before it''s considered ''full.''    size_t max_messages_;    // Monitor lock that protects the queue''s    // internal state from race conditions during concurrent access.    mutable Thread_Mutex monitor_lock_;    // Condition variable used in conjunction with <monitor_lock_> to make    // synchronized method threads wait until the queue is no longer empty.    Thread_Condition not_empty_;    // Condition variable used in conjunction with <monitor_lock_> to make    // synchronized method threads wait until the queue is no longer full.    Thread_Condition not_full_; };

探索Java同步机制(6)

时间:2011-07-08 IBM 李三红

清单 7. Message_Queue.cpp

#include "Message_Queue.h" Message_Queue::Message_Queue (size_t max_messages) :not_full_(monitor_lock_), not_empty_(monitor_lock_), max_messages_(max_messages), message_count_(0) { } bool Message_Queue::empty () const {    Guard<Thread_Mutex> guard (monitor_lock_);    return empty_i (); } bool Message_Queue::full () const {    Guard<Thread_Mutex> guard (monitor_lock_);    return full_i (); } void Message_Queue::put (const Message &msg) {    // Use the Scoped Locking idiom to acquire/release the < monitor_lock_> upon    // entry/exit to the synchronized method.    Guard<Thread_Mutex> guard (monitor_lock_);    // Wait while the queue is full.    while (full_i ()) {      // Release < monitor_lock_> and suspend the      // calling thread waiting for space in the queue.      // The <monitor_lock_> is reacquired automatically when <wait> returns.      not_full_.wait ();    }    // Enqueue the <M

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号