#include <windows.h> // WinAPI 사용
#include <stdio.h>
int target = 0;
int WINAPI addTarget(LPVOID param) { // 파라미터로 원래 LPVOID 타입을 사용하지만 void * 를 사용해도 같음
int limit = *(int *) param;
int i=0;
for (i=1; i<=limit; i++) {
printf("[ADD] target : %d\n", ++target);
}
return 0;
}
int WINAPI subtractTarget(LPVOID param) {
int limit = *(int *) param;
int i=0;
for (i=1; i<=limit; i++) {
printf("[SUBTRACT] target : %d\n", --target);
}
return 0;
}
int main() {
int threadId1;
int threadId2;
HANDLE threadHandle1;
HANDLE threadHandle2;
int param=100;
// 스레드 생성
threadHandle1 = CreateThread(NULL, 0, addTarget, ¶m, 0, &threadId1);
threadHandle2 = CreateThread(NULL, 0, subtractTarget, ¶m, 0, &threadId2);
Sleep(3000);
printf("target : %d\n", target);
return 0;
}
동기화를 안 했기 때문에 두 개의 스레드가 각자 돌아가면서 값을 출력한다.
typedef unsigned long DWORD;
typedef void far * LPVOID;
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int target = 0;
void * addTarget(void * param)
{
int limit = *(int *) param;
int i=0;
for (i=1; i<=limit; i++) {
printf("[ADD] target : %d\n", ++target);
}
}
void * subtractTarget(void * param)
{
int limit = *(int *) param;
int i=0;
for (i=1; i<=limit; i++) {
printf("[SUBTRACT] target : %d\n", --target);
}
}
int main()
{
pthread_t add, sub;
int param = 100;
int add_id = pthread_create(&add, NULL, addTarget, ¶m);
// error handling, 정상적으로 생성되면 0 반환
if (add_id < 0)
{
perror("thread create error : ");
exit(0);
}
int sub_id = pthread_create(&sub, NULL, subtractTarget, ¶m);
if (sub_id < 0)
{
perror("thread create error : ");
exit(0);
}
sleep(3000);
printf("target : %d\n", target);
return 0;
}
-lpthread
옵션 추가