Гарантировано ли, что обновленные данные в MySQL будут видны запросу в другом потоке, если уведомление не устанавливает MySql

Форум по Mysql
Ответить
Anonymous
 Гарантировано ли, что обновленные данные в MySQL будут видны запросу в другом потоке, если уведомление не устанавливает

Сообщение Anonymous »

Рассмотрим этот пример:

Код: Выделить всё

#include 
#include 
extern char* mysql_query(char const*);
extern char* do_mysql_update();
int main(){
std::atomic flag = false;
auto t1 = std::thread([&](){
do_mysql_update("");  // #1
mysql_query("COMMIT"); // #2
flag.store(true, std::memory_order::seq_cst); // #3
});
auto t2 = std::thread([&](){
while (!flag.load(std::memory_order::relaxed)); // #4
mysql_query("SELECT ... for shared"); // #5
});
t1.join();
t2.join();
}
С точки зрения стандарта C++ #3 не синхронизируется с #4, поэтому между #2 и #5 нет связи happen-before. То есть #2 и #5 неупорядочены, не говоря уже о том, что между #2 и #5 существует глобальная временная шкала. С этой точки зрения, #2 и #5 не гарантированно выполняются в определенном порядке, как ожидалось, даже несмотря на то, что #2 и #5 имеют какое-либо наблюдаемое поведение, определенное стандартом C++. IIUC, мы можем наблюдать, что поведение, создаваемое #2 и #5, происходит в любом значимом порядке (даже если эти две функции включают «Доступ через изменчивые glvalues»).

Следующее определяет наблюдаемое поведение программы:
  • Доступы через изменчивые glvalues оцениваются строго в соответствии с правилами абстрактного машине.
  • Данные доставляются в хост-среду для записи в файлы.

Доступы через изменчивые значения glvalue могут оцениваться в любом порядке, поскольку happen-before не происходит. Аналогично, данные могут доставляться в любом порядке. Таким образом, реализация может выполнить переупорядочение в соответствии с правилом «как если бы», не нарушая наблюдаемого поведения.
Итак, мне интересно, #1 не гарантированно будет виден #5 с точки зрения стандарта C++. Верно ли это понимание?

Подробнее здесь: https://stackoverflow.com/questions/798 ... another-th
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»