´ó¹¤18´º¡¶²Ù×÷ϵͳ¡·´ó×÷ÒµÌâÄ¿¼°ÒªÇó´ð°¸ ÏÂÔØ±¾ÎÄ

3.3Ä£¿é˵Ã÷£º

const unsigned short SIZE_OF_BUFFER = 10; //»º³åÇø³¤¶È

unsigned short ProductID = 0; //²úÆ·ºÅ unsigned short ConsumeID = 0; //½«±»ÏûºÄµÄ²úÆ·ºÅ

unsigned short in = 0; //²úÆ·½ø»º³åÇøÊ±µÄ»º³åÇøÏ±ê

unsigned short out = 0; //²úÆ·³ö»º³åÇøÊ±µÄ

»º³åÇøÏ±ê

int g_buffer[SIZE_OF_BUFFER]; //»º³åÇøÊǸöÑ­»·¶ÓÁÐ bool g_continue = true; //¿ØÖƳÌÐò½áÊø HANDLE g_hMutex; //ÓÃÓÚÏ̼߳äµÄ»¥³â HANDLE g_hFullSemaphore; //µ±»º³åÇøÂúʱÆÈʹÉú²úÕߵȴý

HANDLE g_hEmptySemaphore; //µ±»º³åÇø¿ÕʱÆÈʹÏû·ÑÕߵȴý

DWORD WINAPI Producer(LPVOID); //Éú²úÕßÏß³Ì DWORD WINAPI Consumer(LPVOID); //Ïû·ÑÕßÏß³Ì

3.4Ô´³ÌÐò

#include #include

const unsigned short SIZE_OF_BUFFER = 20;//Óн绺³åÇø³¤¶È int g_buffer[SIZE_OF_BUFFER];//¿ª±Ù»º³åÇø£¬ÓÃÊý×é±íʾ£¬¿ÉÒÔ¿´³ÉÊÇÒ»¸öÑ­»·¶ÓÁÐ

unsigned short ProductID = 0;//ÐÂÉú²ú³öÀ´µÄ²úÆ·µÄ²úÆ·ºÅ unsigned short ConsumeID = 0;//±»ÏûºÄµÄ²úÆ·µÄ²úÆ·ºÅ

unsigned short in = 0;//²úÆ·½ø»º³åÇøÊ±µÄ»º³åÇøÏ±꣬ÓÃÓڼǼÉú²úÕßµÄÖ¸ÕëλÖÃ

unsigned short out = 0;//²úÆ·³ö»º³åÇøÊ±µÄ»º³åÇøÏ±꣬ÓÃÓڼǼÏû·ÑÕßµÄÖ¸ÕëλÖÃ

bool g_continue = 1;//¿ØÖƳÌÐòÔËÐУº1±íʾ¼ÌÐøÔËÐУ¬0±íʾֹͣÔËÐÐ

HANDLE g_hMutex;//Ï̼߳äµÄ»¥³âÐźÅÁ¿

HANDLE g_hFullSemaphore;//×ÊÔ´ÐźÅÁ¿£º»º³åÇøÂú HANDLE g_hEmptySemaphore;//×ÊÔ´ÐźÅÁ¿£º»º³åÇø¿Õ DWORD WINAPI Producer(LPVOID);//Éú²úÕßÏß³Ì DWORD WINAPI Consumer(LPVOID);//Ïû·ÑÕßÏß³Ì

const unsigned short PRODUCERS_COUNT=4;//Éú²úÕߵĸöÊý const unsigned short CONSUMERS_COUNT=3;//Ïû·ÑÕߵĸöÊý const

unsigned

short

THREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;//×ÜÏß³ÌÊý

HANDLE hThreads[PRODUCERS_COUNT];//¸÷Ï̵߳Ähandle DWORD producerID[CONSUMERS_COUNT];//Éú²úÕßÏ̵߳ıêʶ·û DWORD consumerID[THREADS_COUNT];//Ïû·ÑÕßÏ̵߳ıêʶ·û

/*----------------------------------------------------------*/

//Éú²úÒ»¸ö²úÆ·£¬Êä³öÆäIDºÅ void Produce() { }

/*----------------------------------------------------------*/

/*----------------------°ÑÐÂÉú²úµÄ²úÆ··ÅÈ뻺³åÇø¿ªÊ¼------------------------*/

//°ÑÐÂÉú²úµÄ²úÆ··ÅÈ뻺³åÇø void Append()

Éú

²ú

Ò»

¸ö

²ú

Æ·

½á

Êø

std::cout<

std::cerr<<\Éú²úÒ»¸ö²úÆ·: \std::cout<

Éú

²ú

Ò»

¸ö

²ú

Æ·

¿ª

ʼ

{

std::cerr<<\°ÑÉú²úµÄ²úÆ·ËÍÈ뻺³åÇø\g_buffer[in]=ProductID; in=(in+1)%SIZE_OF_BUFFER; std::cerr<

std::cout<<\»º³åÇø ²úÆ· Éú²úÕß/Ïû·ÑÕß\

//вúÆ··ÅÈ뻺³åÇøºó£¬Êä³ö»º³åÇøµ±Ç°µÄ״̬

for(int i=0;i

//Êä³ö»º³åÇøÏ±ê if (i<10)

std::cout<

else

std::cout<

if(i==in) { }

if(i==out) {

if(g_buffer[i]<10)

std::cout<<\if(g_buffer[i]<10)

std::cout<<\

else

std::cout<<\

std::cout<<\Éú²úÕß\Êä³öÉú²úÕßµÄÖ¸ÕëλÖÃ

else

std::cout<<\

std::cout<<\Ïû·ÑÕß\Êä³öÏû·ÑÕßµÄÖ¸ÕëλÖÃ