📄 atomic_op.cpp
字号:
// Atomic_Op.cpp,v 1.2 2004/01/06 18:38:52 shuston Exp#include "ace/Synch.h"#include "ace/Task.h"#include "ace/Log_Msg.h"#include "ace/Atomic_Op.h"#if defined(RUNNING_ON_UNSAFE_MULTIPROCESSOR)// Listing 1 code/ch14typedef ACE_Atomic_Op<ACE_Thread_Mutex, unsigned int> SafeUInt;// Listing 1// Listing 2 code/ch14typedef ACE_Atomic_Op<ACE_Thread_Mutex, int> SafeInt;// Listing 2#elsetypedef ACE_Atomic_Op<ACE_Null_Mutex, unsigned int> SafeUInt;typedef ACE_Atomic_Op<ACE_Null_Mutex, int> SafeInt;#endif /* RUNNING_ON_UNSAFE_MULTIPROCESSOR) */static const unsigned int Q_SIZE = 2;static const int MAX_PROD = 10;// Listing 3 code/ch14class Producer : public ACE_Task_Base{public: Producer (int *buf, SafeUInt &in, SafeUInt &out) : buf_(buf), in_(in), out_(out) { } int svc (void) { SafeInt itemNo = 0; while (1) { // Busy wait. do { } while (in_.value () - out_.value () == Q_SIZE); itemNo++; buf_[in_.value () % Q_SIZE] = itemNo.value (); in_++; ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Produced %d \n"), itemNo.value ())); if (check_termination (itemNo.value ())) break; } return 0; } int check_termination (int item) { return (item == MAX_PROD); } private: int * buf_; SafeUInt& in_; SafeUInt& out_;};class Consumer : public ACE_Task_Base{public: Consumer (int *buf, SafeUInt &in, SafeUInt& out) : buf_(buf), in_(in), out_(out) { } int svc (void) { while (1) { int item; // Busy wait. do { } while (in_.value () - out_.value () == 0); item = buf_[out_.value () % Q_SIZE]; out_++; ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Consumed %d\n"), item)); if (check_termination (item)) break; } return 0; } int check_termination (int item) { return (item == MAX_PROD); }private: int * buf_; SafeUInt& in_; SafeUInt& out_;};// Listing 3// Listing 4 code/ch14int ACE_TMAIN (int, ACE_TCHAR *[]){ int shared_buf[Q_SIZE]; SafeUInt in = 0; SafeUInt out = 0; Producer producer (shared_buf, in, out); Consumer consumer (shared_buf, in, out); producer.activate(); consumer.activate(); producer.wait(); consumer.wait(); return 0;}// Listing 4#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)template class ACE_Atomic_Op<ACE_Null_Mutex, unsigned int>;template class ACE_Atomic_Op<ACE_Null_Mutex, int>;template class ACE_Atomic_Op_Ex<ACE_Null_Mutex, unsigned int>;template class ACE_Atomic_Op_Ex<ACE_Null_Mutex, int>;#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)#pragma instantiate ACE_Atomic_Op<ACE_Null_Mutex, unsigned int>#pragma instantiate ACE_Atomic_Op<ACE_Null_Mutex, int>#pragma instantiate ACE_Atomic_Op_Ex<ACE_Null_Mutex, unsigned int>#pragma instantiate ACE_Atomic_Op_Ex<ACE_Null_Mutex, int>#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -