2016-03-29 2 views
2

Я пытаюсь дать понять, что именно «блокируется» точно означает. Я прочитал следующее: «Блокированные функции обеспечивают простой механизм синхронизации доступа к переменной, которая разделяется несколькими потоками, а также выполняет операции с переменными в атомном режиме».Какие операции называются взаимосвязанными?

Так могут ли быть названы взаимоблокируемые функции?

#include <QtCore> 
#include <QAtomicPointer> 

QAtomicInt i; 

void interlockedMultiply(int factor) 
{ 
    int oldValue; 
    do 
    { 
     oldValue = i; 
    } while (!i.testAndSetOrdered(oldValue, oldValue * factor)); 
} 


long long x; 
QReadWriteLock lock; 

void interlockedAdd(long long y) 
{ 
    lock.lockForWrite(); 
    x += y; 
    lock.unlock(); 
} 

Если нет, предложите правильное имя, пожалуйста.

+1

'Interlocked' на самом деле не означает ничего конкретного, по моему опыту (я могу ошибаться). Это скорее метка, применяемая к функциям утилиты, которые переносят атомные примитивы. Так что да, я бы сказал, что это прекрасно, чтобы обозначить эти функции «сблокированные», хотя, возможно, использование блокировки в такой функции удивительно. – Cameron

ответ

1

Блокировка означает, что параллельные операции приведут к ожидаемому результату. То есть если вы выполняете скрепленное добавление пять раз, переменная будет увеличиваться пять раз. Не больше, и не меньше.

+0

Обе эти функции следуют этому правилу. Так мы можем назвать их взаимосвязанными? Мне особенно интересно, что с критической секцией, поскольку блокированные операции часто используются как альтернатива блокирующим операциям, то есть блокировки. – mentalmushroom

+0

Даже атомная операция может использовать блокировки. – knivil

0

Это не обманчиво назвать эти функции как таковые, но вы должны документировать их семантику, предпочтительно используя какое-то формальное описание, которое поддерживает примитивы параллелизма.