Race condition을 해결하기 위한 방법 : Lock mechanism
FLOCK : 동기화(Lock을 획득/해제 설정)
int flock(int fd, int ,operation)
parameter
- fd : Lock 획득/해제하려는 파일 디스크립터
- operation
- LOCK_SH : shared lock 걸기
- LOCK_EX : exclusive lock 걸기
- LOCK_UN : lock 풀기
- LOCK_NB : non-block 다른 값과 ORing하여 사용
반환값
- 성공 시 0 , 싷패 시 -1
Shared lock(공유 락) : 한 프로세스 또는 쓰레드 작업 완료하기 전에도 다른 프로세스 또는 쓰레드에서 접근 가능
-> lock 자체를 공유 가능
Exclusive lock(배타적 락) : 한 프로세스 또는 쓰레드 작업 완료하기 전까지 다른 프로세스 또느 쓰레드에서 접근 불가
-> lock 자체를 공유 불가
shared lock 획득 시도 | exclusive lock 획득 시도 | |
lock 없는 경우 | 즉시 성공 | 즉시 성공 |
shared lock 상태 | 즉시 성공 | 모든 shared lock이 풀릴 때까지 대기 |
exclusive lock 상태 | exclusive lock이 풀릴 때까지 대기 | exclusive lock이 풀릴 때까지 대기 |
'리눅스 > 임베디드 리눅스' 카테고리의 다른 글
echo 리다이렉트 정의 및 사용법 (0) | 2024.11.13 |
---|---|
pthread API (0) | 2024.10.25 |
리눅스 디렉토리 구조[1] (0) | 2024.08.19 |
저수준 OpenAPI (0) | 2024.08.13 |