暫時放一例子如下:
class CUploadSongRoad{
HANDLE buffer_full;
HANDLE buffer_empty;
int m_nRoadNum;
CRITICAL_SECTION sc, oc;
int *buffer;
int buffer_p;
int buffer_c;
int p;
int c;
public:
CUploadSongRoad(){}
CUploadSongRoad(int n):m_nRoadNum(n)
{
buffer = new int[m_nRoadNum];
memset(buffer, 0, m_nRoadNum*sizeof(int));
buffer_full = CreateSemaphore(NULL, m_nRoadNum, m_nRoadNum, NULL);
buffer_empty = CreateSemaphore(NULL, 0, m_nRoadNum, NULL);
InitializeCriticalSection(&sc);
InitializeCriticalSection(&oc);
buffer_c = c = 0;
for(int i=0; i<n; i++){
buffer[i] = i;
}
buffer_p = p = n;
}
~CUploadSongRoad()
{
delete []buffer;
DeleteCriticalSection(&sc);
DeleteCriticalSection(&oc);
CloseHandle(buffer_full);
CloseHandle(buffer_empty);
}
unsigned int produce() {
WaitForSingleObject(buffer_empty, INFINITE);
EnterCriticalSection(&sc);
buffer[buffer_p] = p;
printf( "生產者生產了\t%d\n", buffer[buffer_p]);
buffer_p = (++p) % m_nRoadNum;
LeaveCriticalSection(&sc);
ReleaseSemaphore(buffer_full, 1, NULL);
return 0;
}
unsigned int consume() {
WaitForSingleObject(buffer_full, 10*60*1000);
EnterCriticalSection(&sc);
printf("\t消費者消費了\t%d\n", buffer[buffer_c]);
buffer_c = (++c) % m_nRoadNum;
LeaveCriticalSection(&sc);
ReleaseSemaphore(buffer_empty, 1, NULL);
return 0;
}
};