일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Close
- Sync
- mutex
- FOR
- Callback
- package
- 영화
- install
- API
- go언어
- tcp
- 책
- 리뷰
- Golang
- range
- C
- GO 언어
- Python
- Linux
- window
- bitcoin
- json
- File
- c++
- go
- windows
- JavaScript
- write
- http
- channel
- Today
- Total
목록unlock (3)
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{}..