Back to trackQuant Developer
Next
Track progress147 items
Concurrency

MPMC Queue

Premium
Difficulty

Asked at Jump Trading, Citadel Securities

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.

xxxxxxxxx xxxxxxxxx<x>, x xxxxxxx xxxx xxxxx xxxx xxx xxx xxxxxx xx xxxxxxxx xxx xxxxxxxx xxxxxxx, xxxxx xxxx xxx xxxxx xxx xxx xxxxxxxxx xxxxxxxxx.

xxxx xx xxx xxxxxxxx xxxxxx xxxxxx xxxx xxxxx xxxxxxxx xxx xxx xxxxxxx, xxx xxx xxx x xxxx-xxxx xxxxx xx xxxxxxxxxxx xxxxxxx. xxx xxxxxxxx xxx xxxxxxxx xxxxxxxxx xxx xxxx xx xxx xxxxx.

xxx xxxxxxxxx:

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

xxxxxxxxxxxx:

  • xxxxxx xxxx: xxxxxxxx xxx xxxxxxxxx xx xxx xxxxx xxxx xxxx xxxxxxxx. xxxx xxxxxxxx xxxxxxxxx xxxx xxxxxxx xxxx xxxxxxxx'x xxx xxxxx xxxxx xxx xxxxxxxxx xx xxxx xxxxxxxx'x xxxxxxxxxx xxxxx.
  • xxxxxxxx xxxxx xxxxxxxx xx x xxxxxxxxx xxxxxxxx xxxxxx x xxxxxxxxx xxxx. xxxx-xxxxxxx, xxxxx_xxx, xx xxxxx xxxxxxx xxx xxx xxxxxxxx xxxxxxx.
  • xxx xxx xxxxxxxxx xxxxxxxxx (xxx-xxxx xxx xxx-xxxxx). x xxxxxx xx "xxxxx" xxxx xxx xxx xxxxxxxxx xxxxxxxxx xxx xx xx xxxxx xxxxx.
  • xx xxxxxxx xxx xx xxxx xx xxxxxxxxxx, xxxxxxxxx xxxxxx xxxxxxxx.

xxxxxxxx

[]{
    xxxxxxxxx<xxxx xxxx> xxxxx(xxxx);
    xxx::xxxxxx<xxx::xxxxxx> xxxxxxxxx;
    xxx (xxx x = x; x < x; ++x) {
        xxxxxxxxx.xxxxxxx_xxxx([&xxxxx, x] {
            xxx (xxxx xxxx x = x; x < xxxxxx; ++x) xxxxx.xxxx(x * xxxxxxxxx + x);
        });
    }
    xxx::xxxxxx<xxxx xxxx> xxxxx{x}, xxx{x}, xxxxxxxxxx{x};
    xxx::xxxxxx<xxx::xxxxxx> xxxxxxxxx;
    xxx (xxx x = x; x < x; ++x) {
        xxxxxxxxx.xxxxxxx_xxxx([&xxxxx, &xxxxx, &xxx, &xxxxxxxxxx] {
            xxxx xxxx xxxxxxxx[x] = {-x, -x, -x};
            xxxx xxxx xxxxxxxxxx = x, xxxxxxxx = x, xxxxxxxxxxxxxxx = x;
            xxxxx (xxxx x = xxxxx.xxx()) {
                xxxxx xxxx xxxx xxxxxxxx = *x / xxxxxxxxx;
                xxxxx xxxx xxxx xxx = *x % xxxxxxxxx;
                xx (xxx <= xxxxxxxx[xxxxxxxx]) ++xxxxxxxxxxxxxxx;
                xxxxxxxx[xxxxxxxx] = xxx;
                ++xxxxxxxxxx;
                xxxxxxxx += *x;
            }
            xxxxx += xxxxxxxxxx; xxx += xxxxxxxx; xxxxxxxxxx += xxxxxxxxxxxxxxx;
        });
    }
    xxx (xxxx& x : xxxxxxxxx) x.xxxx();
    xxxxx.xxxxx();
    xxx (xxxx& x : xxxxxxxxx) x.xxxx();
    xxxxxx xxx::xxxxx<xxxx xxxx, xxxx xxxx, xxxx xxxx>(xxxxx.xxxx(), xxx.xxxx(), xxxxxxxxxx.xxxx());
}()
// (xxxxxx, xxxxxxxxxxxx, x)  (xxxxx xxxx xxxxxxxxx xxxx, xxx-xxxxxxxx xxxxx xxxxxx)

[]{ xxxxxxxxx<xxxx xxxx> xxxxx(x); xxx::xxxxxx<xxxx xxxx> xxx; xxx.xxxx_xxxx(xxxxx.xxxx(x)); xxx.xxxx_xxxx(xxxxx.xxxx(x)); xxx.xxxx_xxxx(xxxxx.xxxx(x)); xxx.xxxx_xxxx(xxxxx.xxx().xxxxx_xx(-x)); xxx.xxxx_xxxx(xxxxx.xxxx(xx)); xxx.xxxx_xxxx(xxxxx.xxx().xxxxx_xx(-x)); xxx.xxxx_xxxx(xxxxx.xxx().xxxxx_xx(-x)); xxx.xxxx_xxxx(xxxxx.xxx().xxxxx_xx(-x)); xxxxx.xxxxx(); xxx.xxxx_xxxx(xxxxx.xxxx(xx)); xxx.xxxx_xxxx(xxxxx.xxx().xxx_xxxxx()); xxxxxx xxx; }()
// [x, x, x, x, x, x, x, xx, x, x]  (xxxx; xxxx xxx xxx xxxxxx xxxxx xxxxx-xxx-xxxxx)

xxxxxxxxxxx

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

This problem is only available to subscribers.

Language: C++23MpmcQueue

Unlock the problem to run it against the tests.