#include <ptypes/ptypes.h>␍␊ |
#include <ptypes/pasync.h>␍␊ |
#include <stdio.h>␍␊ |
#include <windows.h>␍␊ |
␍␊ |
USING_PTYPES␍␊ |
␍␊ |
␍␊ |
#define LOOP 20000␍␊ |
␍␊ |
volatile int counter = -1;␍␊ |
volatile unsigned long gvar = 0;␍␊ |
mutex m_lock;␍␊ |
␍␊ |
DWORD WINAPI produce(void* data) {␍␊ |
␉scopelock l(m_lock);␍␊ |
␉int i = 0;␍␊ |
␉for (i = 0; i < LOOP; i++)␍␊ |
␉␉gvar++;␍␊ |
␉return 0;␍␊ |
}␍␊ |
␍␊ |
DWORD WINAPI consume(void* data) {␍␊ |
␉scopelock l(m_lock);␍␊ |
␉int i = 0;␍␊ |
␉for (i = 0; i < LOOP; i++)␍␊ |
␉␉gvar--;␍␊ |
␉return 0;␍␊ |
}␍␊ |
␍␊ |
int main() {␍␊ |
HANDLE thread1, thread2;␍␊ |
thread1 = CreateThread(NULL, 0, produce, NULL, 0, NULL);␍␊ |
thread2 = CreateThread(NULL, 0, consume, NULL, 0, NULL);␍␊ |
WaitForSingleObject(thread1, INFINITE);␍␊ |
WaitForSingleObject(thread2, INFINITE);␍␊ |
printf("gvar = %lu\n", gvar);␍␊ |
} |