Giriş
C++17 ile geliyor. Bu sınıf'ta upgrade lock denilen bir kavram mevcut değil.
Read lock almak için şöyle yaparız.
Şöyle yaparız.
Elimizde read ve write için double buffer kullanan bir yapı olsun.
C++17 ile geliyor. Bu sınıf'ta upgrade lock denilen bir kavram mevcut değil.
Read lock almak için şöyle yaparız.
std::shared_lock<std::shared_mutex> rl (mySharedMutex); // lock shared
Write lock almak için şöyle yaparız.std::unique_lock<std::shared_mutex> wl (mySharedMutex);
ÖrnekŞöyle yaparız.
// Multiple threads/readers can read the counter's value at the same time.
unsigned int get() const {
std::shared_lock<std::shared_mutex> lock(mutex_);
return value_;
}
// Only one thread/writer can increment/write the counter's value.
void increment() {
std::unique_lock<std::shared_mutex> lock(mutex_);
value_++;
}
ÖrnekElimizde read ve write için double buffer kullanan bir yapı olsun.
cv::Mat currentFrame[2];
std::shared_mutex frameMutex[2];
std::mutex writeMutex;
std::atomic<int> activeFrame = 0;
Writer şöyle için yaparız.std::unique_lock<std::mutex> writeLock(writeMutex);
const int writeFrame = activeFrame ^ 1;
std::unique_lock<std::shared_mutex> frameLock(frameMutex[writeFrame]);
cv_img.copyTo(currentFrame[writeFrame]);
activeFrame = writeFrame;
Reader için şöyle yaparız.const int readFrame = activeFrame;
std::shared_lock<std::shared_mutex> frameLock(frameMutex[readFrame]); // lock shared
currentFrame[readFrame].copyTo(frame);
Hiç yorum yok:
Yorum Gönder