std :: параллелизм функции с оператором присваивания и оператором вызова - PullRequest
0 голосов
/ 14 октября 2019

Можно ли одновременно вызывать std::function::operator= и std::function::operator()?

Не определено ли поведение std::function::operator= в потоке один при выполнении std::function::operator() в поток два .

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

1 Ответ

0 голосов
/ 16 октября 2019

"[res.on.objects] / 1 Поведение программы не определено, если вызовы стандартных библиотечных функций из разных потоков могут привести к гонке данных. Условия, при которых это может происходить, указаны в 20.5. 5.9. [Примечание. Изменение объекта стандартного типа библиотеки, совместно используемого потоками, может привести к неопределенному поведению, если только объекты этого типа явно не определены как разделяемые без гонок данных или пользователь не предоставит механизм блокировки. - конец примечание] "-

Комментарий: Игорь Тандетник

Как говорится, я нашел способ сделать то, что хотел. Возможно сделать назначение в операторе вызова. Это означает, что мне не нужно выполнять назначение в другом потоке.

...