Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- long a = 0;
- volatile long b = 0;
- unsigned long c = 0;
- void watek1()
- {
- while (1)
- {
- a++;
- a--;
- b++;
- b--;
- InterlockedIncrement(&c);
- InterlockedDecrement(&c);
- }
- }
- DWORD WINAPI watek2(void *v)
- {
- while (1)
- {
- a++;
- a--;
- b++;
- b--;
- InterlockedIncrement(&c);
- InterlockedDecrement(&c);
- }
- }
- DWORD WINAPI watek3(void *v)
- {
- while (1)
- {
- a += 10;
- a += 10;
- b += 10;
- b += 10;
- InterlockedExchangeAdd(&c, 10);
- InterlockedExchangeAdd(&c, 10);
- InterlockedExchangeSubtract(&c, 20);
- }
- }
- int main(int argc, char *argv[])
- {
- HANDLE watek_a, watek_b, watek_c;
- watek_a = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)watek1, 0, 0, 0);
- watek_b = CreateThread(NULL, 0, watek2, 0, 0, 0);
- watek_c = CreateThread(NULL, 0, watek3, 0, 0, 0);
- for (int i = 1; i<1000; i++)
- {
- Sleep(700);
- printf("a = %d \t b = %d \t c = %d \n", a, b, c);
- }
- CloseHandle(watek_a);
- CloseHandle(watek_b);
- CloseHandle(watek_c);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment