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

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

Сообщение Anonymous »

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

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

#include 
#include 
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 ..."); // #5
});
}
С точки зрения стандарта C++ #3 не синхронизируется с #4, поэтому между #2 и #5 нет связи happen-before. То есть #2 и #5 неупорядочены, не говоря уже о том, что между #2 и #5 существует глобальная временная шкала. С этой точки зрения, #2 и #5 не обязательно будут происходить в определенном порядке, как ожидалось, даже несмотря на то, что #2 и #5 имеют некоторое наблюдаемое поведение. IIUC, мы можем наблюдать, что поведение, создаваемое #2 и #5, происходит в любом значимом порядке.
Итак, мне интересно, #1 не гарантированно будет виден #5, верно?

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

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

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

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

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

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