class Sample
{
int a = 0;
public void Run()
{
// main thread.Assuming this is chromium task runner.
auto currentRunner = GetCurrentDefault();
somePooledRunner->PostTask(
[currentRunner]()
{
a = TimeConsumingOperation();
// post back to main thread.
currentRunner->PostTask([]()
{
OnComplete1(a);
OnComplete2();
});
});
}
void OnComplete1(int a)
{
Process(a);
}
void OnComplete2()
{
Process(this.a); // Is there a data visibility issue here that I'm overlooking but is being handled correctly by the library I'm using?
}
}
Это похоже на SynchronizationContext.post для Async/await. Реализация очередей за заданиями без блокировки помогает мне правильно решить эти проблемы. Но когда я откладываю их и сталкивается с этой проблемой, мне интересно, есть ли здесь проблема. < /P>
class SimpleSample
{
int a = 0;
void Run()
{
auto t = std::thread([this]()
{
a = TimeConsumingOperation();
});
t.detach();
// To simplify the problem, no synchronization mechanism is introduced, and only sleep is performed.
Sleep(enoughTime);
// Assume that the sleep time is sufficient for TimeConsumingOperation to complete and write a in worker thread. Is there a possibility that I cannot obtain the calculation result of a due to data visibility?
printf(a);
}
}
Есть ли вероятность, что я не могу получить результат расчета из -за видимости данных, в simplesample ?
[code]class Sample { int a = 0; public void Run() { // main thread.Assuming this is chromium task runner. auto currentRunner = GetCurrentDefault(); somePooledRunner->PostTask( [currentRunner]() { a = TimeConsumingOperation(); // post back to main thread. currentRunner->PostTask([]() { OnComplete1(a); OnComplete2(); }); }); }
void OnComplete1(int a) { Process(a); }
void OnComplete2() { Process(this.a); // Is there a data visibility issue here that I'm overlooking but is being handled correctly by the library I'm using? } } [/code] Это похоже на SynchronizationContext.post для Async/await. Реализация очередей за заданиями без блокировки помогает мне правильно решить эти проблемы. Но когда я откладываю их и сталкивается с этой проблемой, мне интересно, есть ли здесь проблема. < /P> [code]class SimpleSample { int a = 0; void Run() { auto t = std::thread([this]() { a = TimeConsumingOperation(); });
t.detach(); // To simplify the problem, no synchronization mechanism is introduced, and only sleep is performed. Sleep(enoughTime); // Assume that the sleep time is sufficient for TimeConsumingOperation to complete and write a in worker thread. Is there a possibility that I cannot obtain the calculation result of a due to data visibility?
printf(a); } } [/code] Есть ли вероятность, что я не могу получить результат расчета из -за видимости данных, в [b] simplesample [/b] ?