일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 유스케이스
- 메카님
- pdlc
- 유니티
- frequency-domain spectrum analysis
- Unreal Engine
- reverse gravity
- MAC
- gameplay effect
- ability task
- sampling theory
- dirty cow
- 운영체제
- gameplay ability
- 게임개발
- MLFQ
- stride
- Rr
- ret2libc
- dtft
- CTF
- gas
- DP
- Security
- linear difference equation
- Race condition
- DSP
- 언리얼 엔진
- 언리얼엔진
- 게임 개발
- Today
- Total
목록2024/04/18 (3)
다양한 기록
락을 위해서도 조건변수를 위해서도 사용 가능 sem_init(semaphore, p_shared, initial_value) semaphre : 사용할 세마포 p_shared : 프로세스 간 쉐어, 안하면 0으로 설정하면 됨 initial_value : 이걸 어떻게 사용할 건지에 따라 바이너리 세마포, 카운팅 세마포. 사용법이 다름 int sem_wait(sem_t *s) // 세마포의 값을 1 내리고 음수면 웨이트 int sem_post(sem_t *s) // 세마포의 값을 1 올리고 대기 중인 스레드 하나 꺠우기 두 함수를 사용해서 세마포 사용 sem_t m; sem_init(&m, 0, 1); sem_wait(&m); // critical section sem_post(&m); 락으로 사용하는 경우..
락은 상호배제를 위해서 조건변수는 동기화를 위해서 void *child(void *arg) { printf("child\n"); return NULL; } int main(int argc, char *argv[]) { printf("parent: begin\n"); pthread_t c; pthread_create(&c, NULL, child, NULL); printf("parent: end\n"); return 0; } 부모 스레드와 자식 스레드 중 무엇이 먼저 끝날지 알 수 없음. volatile int done = 0; void *child(void *arg) { printf("child\n"); done = 1; return NULL; } int main(int argc, char *argv[])..
Cuncurrent Counters typedef struct __counter_t { int value; } counter_t; void init(counter_t *c) { c->value = 0; } void increment(counter_t *c) { c->value++; } void decrement(counter_t *c) { c->value--; } int get(counter_t *c) { return c->value; } Traditional 방식 락을 사용하지 않는 카운터: 레이스 컨디션에서 부정확함 typedef sturct __counter_t { int value; pthread_mutex_t lock; } counter_t; void init(counter_t *c) { c->..