일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- c++
- channel
- JavaScript
- json
- windows
- go
- C
- Python
- Callback
- Linux
- GO 언어
- bitcoin
- window
- go언어
- Close
- range
- Sync
- API
- mutex
- 영화
- http
- tcp
- File
- package
- FOR
- Golang
- 책
- write
- 리뷰
- install
- Today
- Total
목록mutex (4)
Code Habit
여러 쓰레드에서 공유되는 데이터에 대해 동시에 접근하는 것을 방지하기 위해 std::mutex를 사용할 수 있다. #include #include int g_shared_data = 0; std::mutex g_mtx; void IncrementSharedData() { // 스코프 기반 락 관리 std::lock_guard lock(g_mtx); g_shared_data++; } int main() { std::vector threads; // 10개의 쓰레드 생성 및 실행 for(int i=0; i < 0; i++) { threads.emplace_back(IncrementSharedData); } // 모든 쓰레드가 종료될때까지 기다림 for(auto& thr : threads) { thr.join..
읽기, 쓰기 뮤텍스는 읽기 동작과 쓰기 동작을 나누어 잠금(락)을 걸 수 있다. 읽기 락(Read Lock): 읽기 락끼리는 서로를 막지 않는다. 하지만, 읽기 시도 중에 값이 바뀌면 안 되므로 쓰기 락은 막는다. 쓰기 락(Write Lock): 쓰기 시도 중에 다른 곳에서 이전 값을 읽으면 안 되고, 다른 곳에서 값을 바꾸면 안 되므로 읽기, 쓰기 락 모두 막는다. sync 패키지에서 제공하는 읽기, 쓰기 뮤텍스 구조체와 함수는 다음과 같다. sync.RWMutex func(rw *RWMutex) Lock(), / func(rw* RWMutex) Unlock(); 쓰기 뮤텍스 잠금 / 잠금 해제 func(rw *RWMutex) RLock(), / func(rw *RWMutex) RUnlock(); 읽기..
뮤텍스는 여러 고루틴이 공유하는 데이터를 보호할 때 사용하며 sync 패키지에서 제공하는 뮤텍스 구조체와 함수는 다음과 같다. sync.Mutex func (m *Mutex) Lock(): 뮤텍스 잠금 func (m *Mutex) Unlock(): 뮤텍스 잠금 해제 사용예제이다. 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 31 32 33 34 35 36 37 38 package main import ( "fmt" "runtime" "sync" "time" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) // 모든 CPU 사용 var data = []int{}..
Go 언어에서는 채널 이외에도 고루틴의 실행 흐름을 제어하는 동기화 객체를 제공한다. 대표적인 동기화 객체는 다음과 같다. Mutex: 상호배제(mutual exclusion)라고도 하며 여러 스레드(고루틴)에서 공유되는 데이터를 보호할 때 주로 사용한다. RWMutex: 읽기/쓰기 뮤텍스이다. 읽기와 쓰기 동작을 나누어서 잠금(락)을 걸 수 있다. Cond: 조건 변수(condition variable)이다. 대기하고 있는 하나의 객체를 깨울 수도 있고 여러 개를 동시에 깨울 수도 있다. Once: 특정 함수를 딱 한 번만 실행할 때 사용한다. Pool: 멀티 스레드(고루틴)에서 사용할 수 있는 객체 풀이다. 자주 사용하는 객체를 풀에 보관했다가 다시 사용한다. WaitGroup: 고루틴이 모두 끝날 ..