Coding
Concurrency

Memory-Order Reasoning Drill

Premium
Difficulty

Asked at Jump Trading, XTX Markets

Theory: Concurrency From Scratch

Read the problem, hints and solution here. The editor needs a bigger screen: open this page on a laptop to write and run your code.

x xxxxxx-xxxx xxxxx xxxxx xxx xxxxxxx xxx xx xxxx: xxx, xxx, xxxx. xxx xxxxxx xxxxxx xx xx xxxxx xxxx; xxxx xxxxxxxx xxxxxxx xxxx xx xxxxxxxx xx xxxxx x xxxxxx. x xxxxx xxxxx xxxxxxx xxxxx xxx xxxxxx xxx xxxx xxxxx. x xxxxxx-xxxxxx xxxx xx xxxxx (xxx xxxxx xx x xxxxxxxxx xxxxx xxxx). xxx xxxxxxxxx xxxxx xxxxxxxx xxx xx xxx xxxxxxx: xxxxxxx xxx xxx xxxxx xx x xxxxxxxx xxxxxxx xxx xxxxx xx xxx xxxx xxxxxxxx; xxx xxxxxx xxxxx xxxxx xxx xxxxxx.

xxxxxxxxx xxxxxxx, x xxxxxxx xxxxxxxxxx xxxxx xxxx xxxx xxxxxx, xxx xxx xxxxxx xxxxxx xxx xxx xxxxxx xx xxxxxx xxxxxxx:

  • xxxx xxxxx(xxxx xxxx x, xxxx xxxx x, xxxx xxxx x): xxxxxxxxx xxx xxxxx xxxxxx xx xxx xxxxxx xxxxxxxx. xxxx xxxx xxxxxx xxxx xxx xxxxxx.
  • xxx::xxxxx<xxxx xxxx, xxxx xxxx, xxxx xxxx> xxxx(): xxxxxxx x xxxxxxxxxx xxxxxxxx: xxx xxxxx xxxxxx xx xxxx xxxxxx xxxxx (xx xxx xxxxxxx xxxxx (x, x, x)). xxxxx x xxx xx xxx xxxxxx. xxxxxxx xxxxxxxxxx xxxxx xx xxxx.
  • xxx::xxxx_x xxxxxxxx() xxxxx: xxx xxxxxxx xxxxxxxx xxxxx.

xxx xxxxx xxxxxxxx, xxxxx xxx xxxx xxxxxx:

  • xxx xxx::xxxxxx<xxx::xxxx_x> xxxxxxxx xxxxxxx, xxxxxxxxx x. xxx xxxxx x xxxxx xx xx xxxxxxxx.
  • xxxxxx: xxxx xxx xxxxxxxx (xxxxxxx), xxxxx xxx + x (xxxxxxx), xxxx x xxx::xxxxxx_xxxxxx_xxxxx(xxx::xxxxxx_xxxxx_xxxxxxx), xxxx xxxxx xxx xxxxx xxxx xxxxxx, xxxx xxxxx xxx + x xxxx xxx::xxxxxx_xxxxx_xxxxxxx. xxxx xxxxx xxxxxxxx xxx xxxxxxxx xx xxxxxxx x, xxx xx xx xxxx xxxxxxx xxxxxx.
  • xxxxxx: xxxx xxx xxxxxxxx xxxx xxx::xxxxxx_xxxxx_xxxxxxx; xx xxx, xxxxx. xxxx xxx xxxxx xxxx xxxxxx, xxxx x xxx::xxxxxx_xxxxxx_xxxxx(xxx::xxxxxx_xxxxx_xxxxxxx), xxxx xx-xxxx xxx xxxxxxxx (xxxxxxx). xx xx xxxxxxx, xxxxx xxx xxxxx xxxxx.
  • xxxxx xxx xxxx xxxxxx xx xxx::xxxxxx<xxxx xxxx> xxxx xxxxxxx xxxxxxxxxx. xxxxx xxxx xxxx xxxxxx xxxx xxx xxxxxx xxxxx xxxxxxxxx xxxxxxxxx xx xxx x++ xxxx xxxxxx xxx xxxxx xxxxxxxx xxxx; xxx xxxxxxxxx xxxxxx xxxx xxxxxx xxx xxx xxx::xxxxxx_xxx xxxxxx xxxxx.

xx xxxxx, xx xxx, xx xxxxxx-xxxx xxxxxx: x xxxx xxxx xxx xxxxxx xxx xxxxxx xxxxx xxxx, xxxx. xxxx xxxx xxxxxxxx xx xxx xxxxxx xxxxx xx xxx xxxxxxxxx.

xxxxxxxx

[]{ xxxxxxx xxxx; xxx::xxxxxx<xxxx xxxx> xxx; xxxx xxxxxxx = xxxx.xxxx(); xxx.xxxx_xxxx(xxx::xxx<x>(xxxxxxx)); xxxx.xxxxx(xx, xx, xx); xxxx xxxxx = xxxx.xxxx(); xxx.xxxx_xxxx(xxx::xxx<x>(xxxxx)); xxx.xxxx_xxxx(xxx::xxx<x>(xxxxx)); xxx.xxxx_xxxx(xxx::xxx<x>(xxxxx)); xxxx.xxxxx(-x, xxx, x); xxxx xxxxxx = xxxx.xxxx(); xxx.xxxx_xxxx(xxx::xxx<x>(xxxxxx)); xxx.xxxx_xxxx(xxx::xxx<x>(xxxxxx)); xxx.xxxx_xxxx(xxx::xxx<x>(xxxxxx)); xxx.xxxx_xxxx(xxxxxx_xxxx<xxxx xxxx>(xxxx.xxxxxxxx())); xxxxxx xxx; }()
// [x, xx, xx, xx, -x, xxx, x, x]  (xxxxxxxxx xxxxx; xxx xxxxxx xxxxx xxxxxxxx xx x)

[]{
    xxxxxxx xxxx;
    xxxx.xxxxx(x, x, x);
    xxx::xxxxxx<xxxx> xxxx{xxxxx};
    xxx::xxxxxx<xxxx xxxx> xxxxxxxxxx{x};
    xxx::xxxxxx<xxx::xxxxxx> xxxxxxx;
    xxx (xxx x = x; x < x; ++x) {
        xxxxxxx.xxxxxxx_xxxx([&xxxx, &xxxx, &xxxxxxxxxx] {
            xxxx xxxx xxxxxxxxxxxxxxx = x;
            xxxxx (!xxxx.xxxx()) {
                xxxx xxxx = xxxx.xxxx();
                xx (xxx::xxx<x>(xxxx) != xxx::xxx<x>(xxxx) + x || xxx::xxx<x>(xxxx) != xxx::xxx<x>(xxxx) + x) ++xxxxxxxxxxxxxxx;
            }
            xxxxxxxxxx += xxxxxxxxxxxxxxx;
        });
    }
    xxx::xxxxxx xxxxxx([&xxxx, &xxxx] {
        xxx (xxxx xxxx x = x; x <= xxxxxx; ++x) xxxx.xxxxx(x, x + x, x + x);
        xxxx.xxxxx(xxxx);
    });
    xxxxxx.xxxx();
    xxx (xxxx& x : xxxxxxx) x.xxxx();
    xxxx xxxx = xxxx.xxxx();
    xxxxxx xxx::xxxxx<xxxx xxxx, xxxx xxxx, xxxx xxxx, xxxx xxxx>(xxxxxxxxxx.xxxx(), xxx::xxx<x>(xxxx), xxx::xxx<x>(xxxx), xxx::xxx<x>(xxxx));
}()
// (x, xxxxxx, xxxxxx, xxxxxx)  (xxxxx xxxxx xxxxx x = x + x, x = x + x; xx xxxx xxxx xxxx x xxx)

xxxxxxxxxxx

  • xxx xxxxxx, xx xx x xxxxxxxxxx xxxxxxx xx xxx xxxxx; (x xxxxx xx^x) xxxxxx xxxx xxxxxxx xxxxxxx xxxxxxxx xxxx xxxxx xxxxxxxx xxxxxxxxx xxx xxxxxx'x xxxxxxxxx. x xxxxxx xxxx xxxx xxxxx xxx xxxx.
  • xxxx() xxxx xx xxxx-xxxx xxx xxx xxxxxx xxxxxxx xxxxxx xxxxxxxxxxxx: xx xxxxxxxx, xx xxxxxxxx xxxxxxxx (x xxxxx xxxx xx xxxxxxxx xxx xxxx).
  • xxxxxxxx() xxxxxx xx x xxx xx xxxx xxxxxxxx xx xxxxx xx xx xxxxxx; xxxxx (x) xxxxxx xx xx xxxxxxx (xx).
  • xxxxxxxxxx xxxxx xxxxxx xxxxx xxxxxx-xxxxxxxx xxxxxxxxxxx: xxx xxxxxxxx xxxxxxxx xxxxxxxxx xxxx xxx xxxxx xx xxx x++ xxxxx xxx xxxxx xxxx xx xxx. xxx xxxxx xxxxxx xxxxxxxxx xxxxx xxxxxxxxxx; xxx xxxxxxxx xxxxxxxx xx xxx xxxxxxxxx'x xxxxxxx, xxx xxxxxxxxxxxxxxx xxxx x xxxxxx xxxxxxx xxxxxx xx xxx xxx xxxxx xx xxx xxxx.

This problem is only available to subscribers.

Language: C++SeqLock
Sample tests

Unlock the problem to run it against the tests.