
parallelSync::set 함수는 동기화 변수를 설정할 때, 다른 스레드에서 읽기 연산이 발생하는 것을 방지하는 기능을 제공하지 않습니다.
이러한 기능을 제공하는 방법은 여러 가지가 있습니다.
1. mutex lock 사용: 동기화 변수를 설정하기 전에 mutex lock을 사용하여 스레드의 접근을 차단합니다. 이후 설정이 완료되면 mutex lock을 해제합니다.
#hostingforum.kr
cpp
std::mutex mtx;
std::shared_ptr data = std::make_shared();
void thread_func() {
std::lock_guard lock(mtx);
// 동기화 변수 설정
}
void main_func() {
// 동기화 변수 설정
std::lock_guard lock(mtx);
data->set(10);
}
2. atomic 변수 사용: atomic 변수는 스레드-safe 하므로, 동기화 변수를 설정할 때 atomic 변수를 사용하여 스레드의 접근을 차단할 필요가 없습니다.
#hostingforum.kr
cpp
std::atomic data(0);
void thread_func() {
// 동기화 변수 설정
data.set(10);
}
void main_func() {
// 동기화 변수 설정
data.set(10);
}
3. std::condition_variable 사용: 동기화 변수를 설정할 때, 다른 스레드에서 읽기 연산이 발생하는 것을 방지하기 위해 std::condition_variable을 사용할 수 있습니다.
#hostingforum.kr
cpp
std::mutex mtx;
std::condition_variable cv;
std::shared_ptr data = std::make_shared();
void thread_func() {
std::unique_lock lock(mtx);
cv.wait(lock, []{ return data->get() != 0; });
// 동기화 변수 설정
}
void main_func() {
// 동기화 변수 설정
std::lock_guard lock(mtx);
data->set(10);
cv.notify_one();
}
위의 예제는 동기화 변수를 설정할 때, 다른 스레드에서 읽기 연산이 발생하는 것을 방지하는 방법을 보여줍니다.
2025-03-08 19:52