https://man7.org/linux/man-pages/man3/pthread_spin_init.3.html
pthread_spin_init(3) - Linux manual page
man7.org
대기 시간이 짧을 경우, mutex보다 spinlock이 훨씬 빠르게 작업을 처리한다.
#include <pthread.h>
#include <stdio.h>
#define endl "\n"
#define THREAD_COUNT 1000
int value = 0;
pthread_spinlock_t spinlock;
void *f(void *data) {
size_t idx = (size_t)data;
for (int i = 0; i < 10; i++) {
pthread_spin_lock(&spinlock);
value++;
// printf("i'm thread %zu, and value is %d now!" endl, idx, value);
pthread_spin_unlock(&spinlock);
}
return 0;
}
int main() {
pthread_t threads[THREAD_COUNT];
if (pthread_spin_init(&spinlock, PTHREAD_PROCESS_PRIVATE)) {
printf("failed to init spinlock!!");
return 1;
}
for (int i = 0; i < THREAD_COUNT; i++)
pthread_create(threads + i, NULL, f, (void *)(size_t)i);
for (int i = 0; i < THREAD_COUNT; i++)
pthread_join(*(threads + i), NULL);
printf("now, the value is %d!" endl, value);
return 0;
}
스핀락의 경우, 초기화 시 락을 프로세스 단위로 공유할 것인지에 대한 여부를 설정해주어야 한다.
프로세스 간 공유가 불필요하다면 PTHREAD_PROCESS_PRIVATE를 적용하면 된다.

출력 확인 및 스핀락의 성능을 확실히 활용하기 위해 쓰레드에서의 출력을 제거했다.
WSL2 arch linux 환경 기준 실행 결과이다. spinlock이 mutex보다 1.5배 빠르게 실행되는 것을 확인할 수 있다.
'C, C++' 카테고리의 다른 글
| C/C++] gcc 최적화 옵션 (0) | 2026.03.18 |
|---|---|
| C/C++] always_inline (0) | 2026.03.06 |
| C++] 템플릿 메타 프로그래밍 (0) | 2026.03.06 |
| C] pthread_mutex_t 활용하기 (0) | 2026.03.04 |
| C] pthread 생성 및 활용 (0) | 2026.03.04 |