Boost - shared_mutex должен быть таким же экземпляром? - PullRequest
1 голос
/ 03 апреля 2011

Я хочу использовать shared_mutex с общими / уникальными блокировками для чтения / записи.

Теперь, если у меня есть 2 объекта и я хочу, чтобы они использовали одну и ту же блокировку, могу ли я присвоить значение первого мьютексавторой мьютекс?
Или мне нужно создать указатель на shared_mutex и затем заставить их обоих указывать на один и тот же экземпляр объекта?

Я имею в виду, будет ли это работать правильно, и оба объекта будут работатьна том же замке?:

typedef boost::shared_mutex ReadWriteMutex;
    class A {
    ReadWriteMutex lock;
}

void test() {
    A a = new A();
    B b = new B()
    b.lock = a.lock;
}

Ответы [ 2 ]

4 голосов
/ 03 апреля 2011

Это не будет работать правильно. shared_mutex происходит от boost::noncopyable. Вместо этого вы хотите использовать указатель или ссылку на мьютекс.

2 голосов
/ 03 апреля 2011

Я бы предпочел создать замок отдельно, а затем передать его вашим объектам.

void test()
{
    ReadWriteMutex  lock;
    A a(lock);             // Notice there is no new here.
    A b(lock);

    // DO Stuff with a and b.
}
...