1800 ข้อมูลถูกต้องมากหรือน้อย แต่มีปัญหาบางประการที่ฉันต้องการแก้ไข
boost::shared_mutex _access;
void reader()
{
boost::shared_lock< boost::shared_mutex > lock(_access);
// do work here, without anyone having exclusive access
}
void conditional_writer()
{
boost::upgrade_lock< boost::shared_mutex > lock(_access);
// do work here, without anyone having exclusive access
if (something) {
boost::upgrade_to_unique_lock< boost::shared_mutex > uniqueLock(lock);
// do work here, but now you have exclusive access
}
// do more work here, without anyone having exclusive access
}
void unconditional_writer()
{
boost::unique_lock< boost::shared_mutex > lock(_access);
// do work here, with exclusive access
}
นอกจากนี้โปรดทราบว่าแตกต่างจาก shared_lock เพียงเธรดเดียวเท่านั้นที่สามารถรับ upgrade_lock ได้ในครั้งเดียวแม้ว่าจะไม่ได้อัปเกรดก็ตาม (ซึ่งฉันคิดว่ามันอึดอัดเมื่อเจอมัน) ดังนั้นหากผู้อ่านทั้งหมดของคุณเป็นนักเขียนที่มีเงื่อนไขคุณต้องหาวิธีแก้ปัญหาอื่น