%3Ch1%3EC%2B%2B%20%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B%E4%B8%8E%E6%97%A0%E9%94%81%E7%BC%96%E7%A8%8B%EF%BC%9A%E4%BB%8E%E5%8E%9F%E8%AF%AD%E5%88%B0%E7%94%9F%E4%BA%A7%E7%BA%A7%E6%97%A0%E9%94%81%E9%98%9F%E5%88%97%E7%9A%84%E5%AE%8C%E5%85%A8%E5%AE%9E%E6%88%98%3C/h1%3E%0A%0A%3Cblockquote%3E%3Cp%3E%E7%8E%B0%E4%BB%A3%E5%A4%9A%E6%A0%B8%E5%A4%84%E7%90%86%E5%99%A8%E4%B8%BA%E4%BA%86%E6%A6%A8%E5%8F%96%E6%80%A7%E8%83%BD%EF%BC%8C%E4%BC%9A%E5%AF%B9%E5%86%85%E5%AD%98%E8%AE%BF%E9%97%AE%E8%BF%9B%E8%A1%8C%E6%BF%80%E8%BF%9B%E7%9A%84%E4%B9%B1%E5%BA%8F%E9%87%8D%E6%8E%92%E3%80%82%E7%BC%96%E8%AF%91%E5%99%A8%E5%90%8C%E6%A0%B7%E4%BC%9A%E5%9C%A8%E4%BC%98%E5%8C%96%E8%BF%87%E7%A8%8B%E4%B8%AD%E9%87%8D%E6%8E%92%E6%8C%87%E4%BB%A4%E9%A1%BA%E5%BA%8F%E3%80%82%E8%BF%99%E4%B8%A4%E5%B1%82%22%E9%87%8D%E6%8E%92%22%E5%8F%A0%E5%8A%A0%E5%9C%A8%E4%B8%80%E8%B5%B7%EF%BC%8C%E6%9E%84%E6%88%90%E4%BA%86%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E4%B8%AD%E6%9C%80%E9%9A%90%E8%94%BD%E3%80%81%E6%9C%80%E9%9A%BE%E8%B0%83%E8%AF%95%E7%9A%84%20bug%20%E6%9D%A5%E6%BA%90%E3%80%82C%2B%2B11%20%E5%BC%95%E5%85%A5%E7%9A%84%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B%EF%BC%8C%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%9C%A8%E8%AF%AD%E8%A8%80%E5%B1%82%E9%9D%A2%E7%BB%99%E4%BA%86%E7%A8%8B%E5%BA%8F%E5%91%98%E7%B2%BE%E7%A1%AE%E6%8E%A7%E5%88%B6%E5%86%85%E5%AD%98%E9%A1%BA%E5%BA%8F%E7%9A%84%E8%AF%AD%E4%B9%89%E5%B7%A5%E5%85%B7%E3%80%82%E6%9C%AC%E6%96%87%E5%B0%86%E4%BB%8E%E7%A1%AC%E4%BB%B6%E4%B9%B1%E5%BA%8F%E7%9A%84%E6%9C%AC%E8%B4%A8%E5%87%BA%E5%8F%91%EF%BC%8C%E5%AE%8C%E6%95%B4%E6%A2%B3%E7%90%86%E5%85%AD%E7%A7%8D%E5%86%85%E5%AD%98%E9%A1%BA%E5%BA%8F%E8%AF%AD%E4%B9%89%EF%BC%8C%E5%B9%B6%E9%80%9A%E8%BF%87%E4%B8%80%E4%B8%AA%E7%94%9F%E4%BA%A7%E7%BA%A7%E6%97%A0%E9%94%81%20MPMC%20%E9%98%9F%E5%88%97%E7%9A%84%E5%AE%9E%E7%8E%B0%EF%BC%8C%E5%B1%95%E7%A4%BA%E8%BF%99%E4%BA%9B%E6%8A%BD%E8%B1%A1%E5%A6%82%E4%BD%95%E8%90%BD%E5%9C%B0%E4%B8%BA%E5%8F%AF%E9%9D%A0%E7%9A%84%E5%B7%A5%E7%A8%8B%E4%BB%A3%E7%A0%81%E3%80%82%3C/p%3E%0A%3C/blockquote%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%B8%80%E3%80%81%E9%97%AE%E9%A2%98%E7%9A%84%E6%A0%B9%E6%BA%90%EF%BC%9A%E8%B0%81%E5%9C%A8%22%E4%B9%B1%E5%BA%8F%22%E4%BD%A0%E7%9A%84%E7%A8%8B%E5%BA%8F%3C/h2%3E%0A%0A%3Ch3%3E1.1%20%E7%BC%96%E8%AF%91%E5%99%A8%E9%87%8D%E6%8E%92%3C/h3%3E%0A%0A%3Cp%3E%E7%9C%8B%E4%B8%80%E6%AE%B5%E7%BB%8F%E5%85%B8%E4%BB%A3%E7%A0%81%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0Aint%20data%20%3D%200%3B%0Abool%20ready%20%3D%20false%3B%0A%0Avoid%20producer%28%29%20%7B%0A%20%20%20%20data%20%3D%2042%3B%20%20%20%20%20%20%20%20%20%20//%20%28A%29%0A%20%20%20%20ready%20%3D%20true%3B%20%20%20%20%20%20%20//%20%28B%29%0A%7D%0A%0Avoid%20consumer%28%29%20%7B%0A%20%20%20%20while%20%28%21ready%29%20%7B%20%7D%20%20//%20%28C%29%0A%20%20%20%20assert%28data%20%3D%3D%2042%29%3B%20//%20%28D%29%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E7%BC%96%E8%AF%91%E5%99%A8%E5%9C%A8%E5%8D%95%E7%BA%BF%E7%A8%8B%E8%AF%AD%E4%B9%89%E4%B8%8B%EF%BC%8C%28A%29%20%E5%92%8C%20%28B%29%20%E4%B9%8B%E9%97%B4%E6%B2%A1%E6%9C%89%E6%95%B0%E6%8D%AE%E4%BE%9D%E8%B5%96%EF%BC%8C%E5%9B%A0%E6%AD%A4%E5%8F%AF%E8%83%BD%E8%A2%AB%E9%87%8D%E6%8E%92%E3%80%82%E5%90%8C%E6%A0%B7%EF%BC%8C%28C%29%20%E5%92%8C%20%28D%29%20%E4%B9%9F%E5%8F%AF%E8%83%BD%E8%A2%AB%E9%87%8D%E6%8E%92%E3%80%82%E4%B8%80%E6%97%A6%E5%8F%91%E7%94%9F%E9%87%8D%E6%8E%92%EF%BC%8Cassert%20%E5%B0%B1%E5%8F%AF%E8%83%BD%E5%A4%B1%E8%B4%A5%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E1.2%20%E7%A1%AC%E4%BB%B6%E4%B9%B1%E5%BA%8F%3C/h3%3E%0A%0A%3Cp%3E%E5%8D%B3%E4%BD%BF%E7%BC%96%E8%AF%91%E5%99%A8%E8%80%81%E5%AE%9E%E4%B8%8D%E9%87%8D%E6%8E%92%EF%BC%8C%E7%8E%B0%E4%BB%A3%20CPU%20%E4%B9%9F%E4%B8%8D%E4%BC%9A%E6%8C%89%E7%A8%8B%E5%BA%8F%E9%A1%BA%E5%BA%8F%E6%89%A7%E8%A1%8C%E5%86%85%E5%AD%98%E6%93%8D%E4%BD%9C%EF%BC%9A%3C/p%3E%0A%0A%3Cp%3E%3Cstrong%3EStore%20Buffer%EF%BC%88%E5%AD%98%E5%82%A8%E7%BC%93%E5%86%B2%E5%8C%BA%EF%BC%89%3C/strong%3E%EF%BC%9A%E5%86%99%E6%93%8D%E4%BD%9C%E5%85%88%E8%BF%9B%E5%85%A5%20Store%20Buffer%20%E5%BC%82%E6%AD%A5%E5%88%B7%E5%9B%9E%E7%BC%93%E5%AD%98%EF%BC%8C%E5%AF%BC%E8%87%B4%E5%90%8E%E7%BB%AD%E8%AF%BB%E5%8F%AF%E8%83%BD%22%E7%9C%8B%E5%88%B0%22%E8%87%AA%E5%B7%B1%E7%9A%84%E5%86%99%E5%B7%B2%E5%AE%8C%E6%88%90%EF%BC%8C%E4%BD%86%E5%85%B6%E4%BB%96%20CPU%20%E7%9C%8B%E4%B8%8D%E5%88%B0%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%3Cstrong%3EInvalidate%20Queue%EF%BC%88%E5%A4%B1%E6%95%88%E9%98%9F%E5%88%97%EF%BC%89%3C/strong%3E%EF%BC%9A%E6%8E%A5%E6%94%B6%E5%88%B0%E7%BC%93%E5%AD%98%E8%A1%8C%E5%A4%B1%E6%95%88%E8%AF%B7%E6%B1%82%E6%97%B6%E4%B8%8D%E7%AB%8B%E5%8D%B3%E5%A4%84%E7%90%86%EF%BC%8C%E8%80%8C%E6%98%AF%E5%85%A5%E9%98%9F%E5%BC%82%E6%AD%A5%E5%A4%84%E7%90%86%EF%BC%8C%E5%AF%BC%E8%87%B4%E6%9C%AC%E5%9C%B0%E7%BC%93%E5%AD%98%E8%A1%8C%E4%BB%8D%E8%A2%AB%E8%A7%86%E4%B8%BA%E6%9C%89%E6%95%88%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%3Cstrong%3E%E8%B6%85%E6%A0%87%E9%87%8F%E6%B5%81%E6%B0%B4%E7%BA%BF%3C/strong%3E%EF%BC%9ACPU%20%E5%9C%A8%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81%E8%B0%83%E5%BA%A6%E6%97%A0%E4%BE%9D%E8%B5%96%E7%9A%84%E6%8C%87%E4%BB%A4%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E8%BF%99%E4%B8%89%E4%B8%AA%E6%9C%BA%E5%88%B6%E5%8F%A0%E5%8A%A0%EF%BC%8C%E4%BA%A7%E7%94%9F%E4%BA%86%E5%9B%9B%E7%A7%8D%E7%BB%8F%E5%85%B8%E7%9A%84%E5%86%85%E5%AD%98%E9%87%8D%E6%8E%92%EF%BC%9A%3C/p%3E%0A%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E9%87%8D%E6%8E%92%E7%B1%BB%E5%9E%8B%3C/th%3E%0A%3Cth%3E%E5%8E%9F%E5%A7%8B%E9%A1%BA%E5%BA%8F%3C/th%3E%0A%3Cth%3E%E5%AE%9E%E9%99%85%E6%95%88%E6%9E%9C%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctr%3E%0A%3Ctd%3ELoad-Load%3C/td%3E%0A%3Ctd%3EL1%20%E2%86%92%20L2%3C/td%3E%0A%3Ctd%3EL2%20%E5%85%88%E4%BA%8E%20L1%20%E5%AE%8C%E6%88%90%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3ELoad-Store%3C/td%3E%0A%3Ctd%3EL1%20%E2%86%92%20S2%3C/td%3E%0A%3Ctd%3ES2%20%E5%85%88%E4%BA%8E%20L1%20%E5%AE%8C%E6%88%90%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3EStore-Load%3C/td%3E%0A%3Ctd%3ES1%20%E2%86%92%20L2%3C/td%3E%0A%3Ctd%3EL2%20%E5%85%88%E4%BA%8E%20S1%20%E5%AE%8C%E6%88%90%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3EStore-Store%3C/td%3E%0A%3Ctd%3ES1%20%E2%86%92%20S2%3C/td%3E%0A%3Ctd%3ES2%20%E5%85%88%E4%BA%8E%20S1%20%E5%AE%8C%E6%88%90%3C/td%3E%0A%3C/tr%3E%0A%3C/tbody%3E%3C/table%3E%0A%0A%3Cp%3E%E4%B8%8D%E5%90%8C%E6%9E%B6%E6%9E%84%E7%9A%84%E9%BB%98%E8%AE%A4%E4%BF%9D%E8%AF%81%E4%B8%8D%E5%90%8C%EF%BC%9Ax86%20%E6%98%AF%20TSO%EF%BC%88Total%20Store%20Order%EF%BC%89%EF%BC%8C%E5%8F%AA%E5%85%81%E8%AE%B8%20Store-Load%20%E9%87%8D%E6%8E%92%EF%BC%9BARM%20%E6%98%AF%20Weak%20Memory%20Model%EF%BC%8C%E5%9B%9B%E7%A7%8D%E5%85%A8%E5%85%81%E8%AE%B8%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%BA%8C%E3%80%81C%2B%2B%20%E5%85%AD%E7%A7%8D%E5%86%85%E5%AD%98%E9%A1%BA%E5%BA%8F%E8%AF%AD%E4%B9%89%3C/h2%3E%0A%0A%3Cp%3EC%2B%2B%20%3Ccode%3Estd%3A%3Aatomic%3C/code%3E%20%E6%8F%90%E4%BE%9B%E4%BA%86%E5%85%AD%E7%A7%8D%E5%86%85%E5%AD%98%E9%A1%BA%E5%BA%8F%EF%BC%88%3Ccode%3Ememory_order%3C/code%3E%EF%BC%89%EF%BC%8C%E6%9C%AC%E8%B4%A8%E4%B8%8A%E6%98%AF%E5%AF%B9%22%E4%BD%A0%E8%83%BD%E4%BF%9D%E8%AF%81%E4%BB%80%E4%B9%88%E3%80%81%E4%B8%8D%E8%83%BD%E4%BF%9D%E8%AF%81%E4%BB%80%E4%B9%88%22%E7%9A%84%E7%B2%BE%E7%A1%AE%E6%8F%8F%E8%BF%B0%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E2.1%20memory_order_relaxed%20%E2%80%94%E2%80%94%20%E5%8F%AA%E4%BF%9D%E8%AF%81%E5%8E%9F%E5%AD%90%E6%80%A7%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0Astd%3A%3Aatomic%26lt%3Bint%26gt%3B%20x%7B0%7D%3B%0Astd%3A%3Aatomic%26lt%3Bint%26gt%3B%20y%7B0%7D%3B%0A%0A//%20Thread%201%0Ax.store%281%2C%20std%3A%3Amemory_order_relaxed%29%3B%0Ay.store%281%2C%20std%3A%3Amemory_order_relaxed%29%3B%0A%0A//%20Thread%202%0Aint%20r1%20%3D%20y.load%28std%3A%3Amemory_order_relaxed%29%3B%0Aint%20r2%20%3D%20x.load%28std%3A%3Amemory_order_relaxed%29%3B%0A//%20%E5%8F%AF%E8%83%BD%20r1%20%3D%3D%201%2C%20r2%20%3D%3D%200%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3ERelaxed%20%E5%8F%AA%E4%BF%9D%E8%AF%81%E6%93%8D%E4%BD%9C%E6%9C%AC%E8%BA%AB%E7%9A%84%E5%8E%9F%E5%AD%90%E6%80%A7%EF%BC%88%E4%B8%8D%E8%A2%AB%E6%92%95%E8%A3%82%EF%BC%89%EF%BC%8C%E4%B8%8D%E4%BF%9D%E8%AF%81%E4%BB%BB%E4%BD%95%E7%BA%BF%E7%A8%8B%E9%97%B4%E9%A1%BA%E5%BA%8F%E3%80%82%E9%80%82%E7%94%A8%E4%BA%8E%E8%AE%A1%E6%95%B0%E5%99%A8%E3%80%81%E7%BB%9F%E8%AE%A1%E9%87%8F%E7%AD%89%22%E5%8F%AA%E7%9C%8B%E6%9C%80%E7%BB%88%E4%B8%80%E8%87%B4%E6%80%A7%22%E7%9A%84%E5%9C%BA%E6%99%AF%E3%80%82%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0A//%20%E5%85%B8%E5%9E%8B%E5%9C%BA%E6%99%AF%EF%BC%9A%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%E9%80%92%E5%87%8F%EF%BC%88%E6%9E%90%E6%9E%84%E8%B7%AF%E5%BE%84%E4%B8%8D%E9%9C%80%E8%A6%81%E5%90%8C%E6%AD%A5%E8%AF%AD%E4%B9%89%EF%BC%89%0Avoid%20release_ref%28%29%20%7B%0A%20%20%20%20if%20%28ref_count.fetch_sub%281%2C%20std%3A%3Amemory_order_relaxed%29%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E5%BC%95%E7%94%A8%EF%BC%9A%E8%BF%99%E9%87%8C%E9%9C%80%E8%A6%81%20acquire%20%E4%BF%9D%E8%AF%81%E7%9C%8B%E5%88%B0%E4%B9%8B%E5%89%8D%E7%9A%84%E5%86%99%E5%85%A5%0A%20%20%20%20%20%20%20%20std%3A%3Aatomic_thread_fence%28std%3A%3Amemory_order_acquire%29%3B%0A%20%20%20%20%20%20%20%20delete%20this%3B%0A%20%20%20%20%7D%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E2.2%20memory_order_acquire%20/%20release%20%E2%80%94%E2%80%94%20%E6%88%90%E5%AF%B9%E5%90%8C%E6%AD%A5%3C/h3%3E%0A%0A%3Cp%3E%E8%BF%99%E6%98%AF%E6%97%A0%E9%94%81%E7%BC%96%E7%A8%8B%E4%B8%AD%E6%9C%80%E5%B8%B8%E7%94%A8%E7%9A%84%E8%AF%AD%E4%B9%89%E5%AF%B9%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%3Cstrong%3EAcquire%20load%3C/strong%3E%EF%BC%9A%E4%BF%9D%E8%AF%81%E5%BD%93%E5%89%8D%E7%BA%BF%E7%A8%8B%E4%B8%AD%EF%BC%8C%E6%AD%A4%20load%20%E4%B9%8B%E5%90%8E%E7%9A%84%E8%AF%BB%E5%86%99%E4%B8%8D%E4%BC%9A%E8%A2%AB%E9%87%8D%E6%8E%92%E5%88%B0%E6%AD%A4%20load%20%E4%B9%8B%E5%89%8D%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%3Cstrong%3ERelease%20store%3C/strong%3E%EF%BC%9A%E4%BF%9D%E8%AF%81%E5%BD%93%E5%89%8D%E7%BA%BF%E7%A8%8B%E4%B8%AD%EF%BC%8C%E6%AD%A4%20store%20%E4%B9%8B%E5%89%8D%E7%9A%84%E8%AF%BB%E5%86%99%E4%B8%8D%E4%BC%9A%E8%A2%AB%E9%87%8D%E6%8E%92%E5%88%B0%E6%AD%A4%20store%20%E4%B9%8B%E5%90%8E%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E4%B8%A4%E8%80%85%E9%85%8D%E5%90%88%EF%BC%8C%E5%BD%A2%E6%88%90%20Synchronizes-With%20%E5%85%B3%E7%B3%BB%EF%BC%9A%E5%A6%82%E6%9E%9C%E7%BA%BF%E7%A8%8B%20A%20%E7%9A%84%20release%20store%20%E5%86%99%E5%85%A5%E7%9A%84%E5%80%BC%EF%BC%8C%E8%A2%AB%E7%BA%BF%E7%A8%8B%20B%20%E7%9A%84%20acquire%20load%20%E8%AF%BB%E5%88%B0%EF%BC%8C%E5%88%99%20A%20%E4%B8%AD%20store%20%E4%B9%8B%E5%89%8D%E7%9A%84%E6%89%80%E6%9C%89%E5%86%99%E5%85%A5%EF%BC%8C%E5%AF%B9%20B%20%E5%8F%AF%E8%A7%81%E3%80%82%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0A//%20%E7%BB%8F%E5%85%B8%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92%0Astruct%20Message%20%7B%0A%20%20%20%20int%20id%3B%0A%20%20%20%20std%3A%3Astring%20payload%3B%0A%7D%3B%0A%0Astd%3A%3Aatomic%26lt%3BMessage%2A%26gt%3B%20msg_ptr%7Bnullptr%7D%3B%0A%0A//%20%E7%94%9F%E4%BA%A7%E8%80%85%0Avoid%20produce%28Message%2A%20m%29%20%7B%0A%20%20%20%20msg_ptr.store%28m%2C%20std%3A%3Amemory_order_release%29%3B%20%20//%20release%E4%B9%8B%E5%89%8D%E7%9A%84%E6%89%80%E6%9C%89%E5%86%99%E5%85%A5%E5%8F%AF%E8%A7%81%0A%7D%0A%0A//%20%E6%B6%88%E8%B4%B9%E8%80%85%0AMessage%2A%20consume%28%29%20%7B%0A%20%20%20%20Message%2A%20m%20%3D%20msg_ptr.load%28std%3A%3Amemory_order_acquire%29%3B%20%20//%20acquire%E4%B9%8B%E5%90%8E%E7%9A%84%E6%89%80%E6%9C%89%E8%AF%BB%E5%8F%96%E4%BF%9D%E8%AF%81%0A%20%20%20%20if%20%28m%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%E8%BF%99%E9%87%8C%E8%83%BD%E7%9C%8B%E5%88%B0%20m-%26gt%3Bid%20%E5%92%8C%20m-%26gt%3Bpayload%20%E7%9A%84%E5%AE%8C%E6%95%B4%E5%86%99%E5%85%A5%0A%20%20%20%20%7D%0A%20%20%20%20return%20m%3B%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E2.3%20memory_order_acq_rel%20%E2%80%94%E2%80%94%20%E8%AF%BB%E5%86%99%E5%90%8C%E6%97%B6%E7%BA%A6%E6%9D%9F%3C/h3%3E%0A%0A%3Cp%3E%E7%94%A8%E4%BA%8E%20Read-Modify-Write%20%E6%93%8D%E4%BD%9C%EF%BC%88%E5%A6%82%20%3Ccode%3Efetch_add%3C/code%3E%E3%80%81%3Ccode%3Ecompare_exchange%3C/code%3E%EF%BC%89%EF%BC%8C%E5%90%8C%E6%97%B6%E5%85%B7%E6%9C%89%20acquire%20%E5%92%8C%20release%20%E8%AF%AD%E4%B9%89%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0A//%20%E8%87%AA%E6%97%8B%E9%94%81%EF%BC%9A%20acquire%20%E7%A1%AE%E4%BF%9D%E7%9C%8B%E5%88%B0%E9%94%81%E9%87%8A%E6%94%BE%E5%89%8D%E7%9A%84%E5%86%99%E5%85%A5%EF%BC%8Crelease%20%E7%A1%AE%E4%BF%9D%E8%87%AA%E5%B7%B1%E5%86%99%E5%85%A5%E5%AF%B9%E5%85%B6%E4%BB%96%E7%BA%BF%E7%A8%8B%E5%8F%AF%E8%A7%81%0Aclass%20SpinLock%20%7B%0A%20%20%20%20std%3A%3Aatomic%26lt%3Bbool%26gt%3B%20locked%7Bfalse%7D%3B%0Apublic%3A%0A%20%20%20%20void%20lock%28%29%20%7B%0A%20%20%20%20%20%20%20%20while%20%28locked.exchange%28true%2C%20std%3A%3Amemory_order_acq_rel%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20//%20%E8%87%AA%E6%97%8B%E7%AD%89%E5%BE%85%EF%BC%8C%E5%8F%AF%E9%80%89%20pause%20%E6%8C%87%E4%BB%A4%E9%99%8D%E4%BD%8E%E5%8A%9F%E8%80%97%0A%20%20%20%20%20%20%20%20%20%20%20%20__builtin_ia32_pause%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20void%20unlock%28%29%20%7B%0A%20%20%20%20%20%20%20%20locked.store%28false%2C%20std%3A%3Amemory_order_release%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E2.4%20memory_order_seq_cst%20%E2%80%94%E2%80%94%20%E5%85%A8%E5%B1%80%E4%B8%80%E8%87%B4%E6%80%A7%3C/h3%3E%0A%0A%3Cp%3E%E8%BF%99%E6%98%AF%E9%BB%98%E8%AE%A4%E8%AF%AD%E4%B9%89%EF%BC%8C%E4%B9%9F%E6%98%AF%E6%9C%80%E5%BC%BA%E7%9A%84%E4%BF%9D%E8%AF%81%E3%80%82%E5%AE%83%E7%A1%AE%E4%BF%9D%E6%89%80%E6%9C%89%E7%BA%BF%E7%A8%8B%E7%9C%8B%E5%88%B0%E5%AE%8C%E5%85%A8%E4%B8%80%E8%87%B4%E7%9A%84%E6%93%8D%E4%BD%9C%E9%A1%BA%E5%BA%8F%E5%85%A8%E5%B1%80%E8%A7%86%E5%9B%BE%E3%80%82%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0Astd%3A%3Aatomic%26lt%3Bint%26gt%3B%20x%7B0%7D%2C%20y%7B0%7D%3B%0A%0A//%20Thread%201%0Ax.store%281%2C%20std%3A%3Amemory_order_seq_cst%29%3B%0A%0A//%20Thread%202%0Ay.store%281%2C%20std%3A%3Amemory_order_seq_cst%29%3B%0A%0A//%20Thread%203%0Aint%20r1%20%3D%20x.load%28std%3A%3Amemory_order_seq_cst%29%3B%0Aint%20r2%20%3D%20y.load%28std%3A%3Amemory_order_seq_cst%29%3B%0A%0A//%20Thread%204%0Aint%20r3%20%3D%20y.load%28std%3A%3Amemory_order_seq_cst%29%3B%0Aint%20r4%20%3D%20x.load%28std%3A%3Amemory_order_seq_cst%29%3B%0A%0A//%20seq_cst%20%E4%BF%9D%E8%AF%81%EF%BC%9A%E4%B8%8D%E5%8F%AF%E8%83%BD%E5%87%BA%E7%8E%B0%20r1%3D%3D1%20%26amp%3B%26amp%3B%20r2%3D%3D0%20%26amp%3B%26amp%3B%20r3%3D%3D1%20%26amp%3B%26amp%3B%20r4%3D%3D0%0A//%EF%BC%88x%20%E5%92%8C%20y%20%E7%9A%84%E5%86%99%E5%85%A5%E5%BF%85%E9%A1%BB%E6%9C%89%E5%85%A8%E5%BA%8F%EF%BC%89%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3Eseq_cst%20%E7%9A%84%E9%97%AE%E9%A2%98%E5%9C%A8%E4%BA%8E%E5%BC%80%E9%94%80%E3%80%82%E5%9C%A8%20ARM%20%E4%B8%8A%EF%BC%8C%E6%AF%8F%E6%9D%A1%20seq_cst%20%E6%93%8D%E4%BD%9C%E9%9C%80%E8%A6%81%E4%B8%80%E4%B8%AA%20%3Ccode%3Edmb%20sy%3C/code%3E%EF%BC%88%E5%85%A8%E5%B1%8F%E9%9A%9C%EF%BC%89%EF%BC%8C%E8%80%8C%20acquire/release%20%E5%8F%AA%E9%9C%80%E8%A6%81%20%3Ccode%3Edmb%20ish%3C/code%3E%EF%BC%88%E5%85%B1%E4%BA%AB%E5%9F%9F%E5%B1%8F%E9%9A%9C%EF%BC%89%EF%BC%8C%E5%90%8E%E8%80%85%E6%9B%B4%E4%BE%BF%E5%AE%9C%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E2.5%20%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B2%A1%E6%9C%89%20memory_order_consume%EF%BC%9F%3C/h3%3E%0A%0A%3Cp%3EC%2B%2B11%20%E5%AE%9A%E4%B9%89%E4%BA%86%20%3Ccode%3Ememory_order_acquire%3C/code%3E%20%E7%9A%84%22%E5%BC%B1%E5%8C%96%E7%89%88%E6%9C%AC%22consume%EF%BC%8C%E5%AE%83%E5%8F%AA%E8%BF%BD%E8%B8%AA%E6%95%B0%E6%8D%AE%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%E8%80%8C%E9%9D%9E%E6%89%80%E6%9C%89%E8%AF%BB%E5%86%99%E3%80%82%E7%90%86%E8%AE%BA%E4%B8%8A%EF%BC%8Cconsume%20%E5%9C%A8%20ARM%20%E4%B8%8A%E5%8F%AF%E4%BB%A5%E7%9C%81%E4%B8%8B%20acquire%20%E5%B1%8F%E9%9A%9C%E7%9A%84%E5%BC%80%E9%94%80%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E7%84%B6%E8%80%8C%E9%97%AE%E9%A2%98%E6%98%AF%EF%BC%9A%3Cstrong%3E%E7%BC%96%E8%AF%91%E5%99%A8%E9%9A%BE%E4%BB%A5%E5%9C%A8%E4%BC%98%E5%8C%96%E8%BF%87%E7%A8%8B%E4%B8%AD%E4%BF%9D%E7%95%99%E4%BE%9D%E8%B5%96%E9%93%BE%3C/strong%3E%E3%80%82%E5%8D%B3%E4%BD%BF%E6%BA%90%E7%A0%81%E9%87%8C%E6%9C%89%E6%95%B0%E6%8D%AE%E4%BE%9D%E8%B5%96%EF%BC%8C%E4%BC%98%E5%8C%96%E5%90%8E%E5%8F%AF%E8%83%BD%E8%A2%AB%22%E5%B1%95%E5%BC%80%22%E6%88%90%E5%80%BC%E4%BE%9D%E8%B5%96%E3%80%82%E6%89%80%E6%9C%89%E4%B8%BB%E6%B5%81%E7%BC%96%E8%AF%91%E5%99%A8%EF%BC%88GCC%E3%80%81Clang%E3%80%81MSVC%EF%BC%89%E9%83%BD%E7%9B%B4%E6%8E%A5%E9%80%80%E5%8C%96%E4%B8%BA%20acquire%E3%80%82C%2B%2B17%20%E6%98%8E%E7%A1%AE%E6%9A%82%E5%81%9C%E4%BA%86%20consume%EF%BC%8CC%2B%2B20%20%E9%87%8D%E6%96%B0%E5%AE%A1%E8%A7%86%E4%BA%86%E8%AE%BE%E8%AE%A1%E6%96%B9%E5%90%91%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E7%BB%93%E8%AE%BA%EF%BC%9A%3Cstrong%3E%E7%94%9F%E4%BA%A7%E4%BB%A3%E7%A0%81%E4%B8%8D%E8%A6%81%E4%BD%BF%E7%94%A8%20consume%3C/strong%3E%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%B8%89%E3%80%81%E7%A1%AC%E4%BB%B6%E5%B1%82%E9%9D%A2%E7%9A%84%E4%BB%A3%E4%BB%B7%E5%AF%B9%E6%AF%94%3C/h2%3E%0A%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E5%86%85%E5%AD%98%E9%A1%BA%E5%BA%8F%3C/th%3E%0A%3Cth%3Ex86%20%E5%B1%8F%E9%9A%9C%3C/th%3E%0A%3Cth%3EARM%20%E5%B1%8F%E9%9A%9C%3C/th%3E%0A%3Cth%3E%E5%85%B8%E5%9E%8B%E9%A2%9D%E5%A4%96%E5%BC%80%E9%94%80%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctr%3E%0A%3Ctd%3Erelaxed%3C/td%3E%0A%3Ctd%3E%E6%97%A0%3C/td%3E%0A%3Ctd%3E%E6%97%A0%3C/td%3E%0A%3Ctd%3E%E4%BB%85%E5%8E%9F%E5%AD%90%E6%8C%87%E4%BB%A4%E6%9C%AC%E8%BA%AB%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3Eacquire%3C/td%3E%0A%3Ctd%3E%E7%BC%96%E8%AF%91%E5%B1%8F%E9%9A%9C%3C/td%3E%0A%3Ctd%3E%3Ccode%3Eldar%3C/code%3E/%3Ccode%3Edmb%20ishld%3C/code%3E%3C/td%3E%0A%3Ctd%3E~10-20ns%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3Erelease%3C/td%3E%0A%3Ctd%3E%E7%BC%96%E8%AF%91%E5%B1%8F%E9%9A%9C%3C/td%3E%0A%3Ctd%3E%3Ccode%3Estlr%3C/code%3E/%3Ccode%3Edmb%20ish%3C/code%3E%3C/td%3E%0A%3Ctd%3E~5-10ns%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3Eacq_rel%3C/td%3E%0A%3Ctd%3E%E7%BC%96%E8%AF%91%E5%B1%8F%E9%9A%9C%3C/td%3E%0A%3Ctd%3E%3Ccode%3Edmb%20ish%3C/code%3E%3C/td%3E%0A%3Ctd%3E~15-25ns%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3Eseq_cst%28lock%29%3C/td%3E%0A%3Ctd%3E%3Ccode%3Emfence%3C/code%3E/%3Ccode%3Elock%3C/code%3E%3C/td%3E%0A%3Ctd%3E%3Ccode%3Edmb%20sy%3C/code%3E%3C/td%3E%0A%3Ctd%3E~30-50ns%20%28x86%29%20/%20~40-60ns%20%28ARM%29%3C/td%3E%0A%3C/tr%3E%0A%3C/tbody%3E%3C/table%3E%0A%0A%3Cp%3E%E5%85%B7%E4%BD%93%E6%95%B0%E5%AD%97%E5%9B%A0%E5%BE%AE%E6%9E%B6%E6%9E%84%E5%B7%AE%E5%BC%82%E5%BE%88%E5%A4%A7%EF%BC%8C%E4%BD%86%E7%9B%B8%E5%AF%B9%E5%85%B3%E7%B3%BB%E7%A8%B3%E5%AE%9A%EF%BC%9A%3Cstrong%3Erelaxed%20%3C%20release%20%3C%20acquire%20%3C%20acq_rel%20%E2%89%88%20seq_cst%3C/strong%3E%E3%80%82%E5%9C%A8%E9%AB%98%E5%B9%B6%E5%8F%91%E7%83%AD%E7%82%B9%E8%B7%AF%E5%BE%84%E4%B8%8A%EF%BC%8C%E6%AD%A3%E7%A1%AE%E9%80%89%E7%94%A8%20acquire/release%20%E6%9B%BF%E4%BB%A3%20seq_cst%20%E5%8F%AF%E5%B8%A6%E6%9D%A5%E6%98%BE%E8%91%97%E6%80%A7%E8%83%BD%E6%8F%90%E5%8D%87%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E5%9B%9B%E3%80%81%E7%94%9F%E4%BA%A7%E7%BA%A7%E6%97%A0%E9%94%81%20MPMC%20%E9%98%9F%E5%88%97%E5%AE%9E%E6%88%98%3C/h2%3E%0A%0A%3Cp%3E%E4%B8%8B%E9%9D%A2%E6%88%91%E4%BB%AC%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E5%A4%9A%E7%94%9F%E4%BA%A7%E8%80%85%E5%A4%9A%E6%B6%88%E8%B4%B9%E8%80%85%EF%BC%88MPMC%EF%BC%89%E7%9A%84%E6%97%A0%E9%94%81%E9%98%9F%E5%88%97%EF%BC%8C%E8%BF%99%E6%98%AF%E9%AB%98%E5%B9%B6%E5%8F%91%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E6%A0%B8%E5%BF%83%E7%BB%84%E4%BB%B6%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E4.1%20%E8%AE%BE%E8%AE%A1%E5%86%B3%E7%AD%96%3C/h3%3E%0A%0A%3Cp%3E%E5%9F%BA%E4%BA%8E%E7%8E%AF%E5%BD%A2%E7%BC%93%E5%86%B2%E5%8C%BA%E7%9A%84%20MPMC%20%E9%98%9F%E5%88%97%E6%98%AF%E5%B7%A5%E4%B8%9A%E7%95%8C%E6%9C%80%E5%B8%B8%E7%94%A8%E7%9A%84%E6%96%B9%E6%A1%88%E3%80%82%E6%A0%B8%E5%BF%83%E8%AE%BE%E8%AE%A1%EF%BC%9A%3C/p%3E%0A%0A%3Cul%3E%3Cli%3E%E5%9B%BA%E5%AE%9A%E5%A4%A7%E5%B0%8F%E7%9A%84%E7%8E%AF%E5%BD%A2%E6%95%B0%E7%BB%84%EF%BC%882%20%E7%9A%84%E5%B9%82%E6%AC%A1%EF%BC%8C%E4%BE%BF%E4%BA%8E%E4%BD%8D%E6%8E%A9%E7%A0%81%E5%8F%96%E6%A8%A1%EF%BC%89%3C/li%3E%0A%3Cli%3Ehead%20%E6%8C%87%E9%92%88%EF%BC%9A%E6%B6%88%E8%B4%B9%E8%80%85%20pop%20%E7%9A%84%E4%BD%8D%E7%BD%AE%3C/li%3E%0A%3Cli%3Etail%20%E6%8C%87%E9%92%88%EF%BC%9A%E7%94%9F%E4%BA%A7%E8%80%85%20push%20%E7%9A%84%E4%BD%8D%E7%BD%AE%3C/li%3E%0A%3Cli%3E%E6%AF%8F%E4%B8%AA%E6%A7%BD%E4%BD%8D%E7%BB%B4%E6%8A%A4%E4%B8%80%E4%B8%AA%E5%BA%8F%E5%88%97%E5%8F%B7%EF%BC%8C%E7%94%A8%E4%BA%8E%E5%88%A4%E6%BB%A1/%E5%88%A4%E7%A9%BA%E5%90%8C%E6%AD%A5%3C/li%3E%0A%3C/ul%3E%0A%0A%3Ch3%3E4.2%20%E5%AE%8C%E6%95%B4%E5%AE%9E%E7%8E%B0%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0A%23include%20%26lt%3Batomic%26gt%3B%0A%23include%20%26lt%3Bcstdint%26gt%3B%0A%23include%20%26lt%3Bmemory%26gt%3B%0A%23include%20%26lt%3Boptional%26gt%3B%0A%23include%20%26lt%3Bnew%26gt%3B%0A%23include%20%26lt%3Biostream%26gt%3B%0A%0Atemplate%20%26lt%3Btypename%20T%2C%20size_t%20Capacity%26gt%3B%0Aclass%20LockFreeQueue%20%7B%0A%20%20%20%20static_assert%28%28Capacity%20%26amp%3B%20%28Capacity%20-%201%29%29%20%3D%3D%200%2C%20%22Capacity%20must%20be%20power%20of%202%22%29%3B%0A%0A%20%20%20%20struct%20Slot%20%7B%0A%20%20%20%20%20%20%20%20std%3A%3Aatomic%26lt%3Buint64_t%26gt%3B%20seq%7B0%7D%3B%0A%20%20%20%20%20%20%20%20T%20data%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20alignas%2864%29%20Slot%20buffer_%5BCapacity%5D%3B%20%20%20%20%20%20%20%20%20%20//%20%E7%BC%93%E5%AD%98%E8%A1%8C%E5%AF%B9%E9%BD%90%EF%BC%8C%E9%81%BF%E5%85%8D%20false%20sharing%0A%20%20%20%20alignas%2864%29%20std%3A%3Aatomic%26lt%3Buint64_t%26gt%3B%20head_%7B0%7D%3B%20%20//%20%E6%B6%88%E8%B4%B9%E8%80%85%E6%B6%88%E8%B4%B9%E4%BD%8D%E7%BD%AE%0A%20%20%20%20alignas%2864%29%20std%3A%3Aatomic%26lt%3Buint64_t%26gt%3B%20tail_%7B0%7D%3B%20%20//%20%E7%94%9F%E4%BA%A7%E8%80%85%E6%94%BE%E5%85%A5%E4%BD%8D%E7%BD%AE%0A%0A%20%20%20%20static%20constexpr%20size_t%20MASK%20%3D%20Capacity%20-%201%3B%0A%0Apublic%3A%0A%20%20%20%20LockFreeQueue%28%29%20%7B%0A%20%20%20%20%20%20%20%20for%20%28size_t%20i%20%3D%200%3B%20i%20%26lt%3B%20Capacity%3B%20%2B%2Bi%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20buffer_%5Bi%5D.seq.store%28i%2C%20std%3A%3Amemory_order_relaxed%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20//%20%E7%A6%81%E6%AD%A2%E6%8B%B7%E8%B4%9D%E5%92%8C%E7%A7%BB%E5%8A%A8%0A%20%20%20%20LockFreeQueue%28const%20LockFreeQueue%26amp%3B%29%20%3D%20delete%3B%0A%20%20%20%20LockFreeQueue%26amp%3B%20operator%3D%28const%20LockFreeQueue%26amp%3B%29%20%3D%20delete%3B%0A%0A%20%20%20%20bool%20try_push%28const%20T%26amp%3B%20item%29%20%7B%0A%20%20%20%20%20%20%20%20uint64_t%20pos%20%3D%20tail_.load%28std%3A%3Amemory_order_relaxed%29%3B%0A%20%20%20%20%20%20%20%20Slot%2A%20slot%20%3D%20%26amp%3Bbuffer_%5Bpos%20%26amp%3B%20MASK%5D%3B%0A%0A%20%20%20%20%20%20%20%20//%20%E5%85%B3%E9%94%AE%EF%BC%9A%E6%A3%80%E6%9F%A5%E8%AF%A5%E6%A7%BD%E4%BD%8D%E5%BA%8F%E5%88%97%E5%8F%B7%E6%98%AF%E5%90%A6%E7%AD%89%E4%BA%8E%20tail%20%E4%BD%8D%E7%BD%AE%EF%BC%88%E5%8D%B3%E6%A7%BD%E4%BD%8D%E7%A9%BA%E9%97%B2%EF%BC%89%0A%20%20%20%20%20%20%20%20uint64_t%20slot_seq%20%3D%20slot-%26gt%3Bseq.load%28std%3A%3Amemory_order_acquire%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28slot_seq%20%21%3D%20pos%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20//%20seq%20%26gt%3B%20pos%20%E8%A1%A8%E7%A4%BA%E6%A7%BD%E4%BD%8D%E4%BB%8D%E5%9C%A8%E4%BD%BF%E7%94%A8%EF%BC%9Bseq%20%26lt%3B%20pos%20%E8%A1%A8%E7%A4%BA%E8%B6%85%E5%87%BA%E5%AE%B9%E9%87%8F%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%20//%20%E9%98%9F%E5%88%97%E6%BB%A1%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20//%20CAS%20%E7%AB%9E%E4%BA%89%20tail%20%E6%8C%87%E9%92%88%EF%BC%9A%E5%A4%9A%E4%B8%AA%E7%94%9F%E4%BA%A7%E8%80%85%E4%B8%AD%E5%8F%AA%E6%9C%89%E4%B8%80%E4%B8%AA%E8%83%BD%E6%88%90%E5%8A%9F%0A%20%20%20%20%20%20%20%20if%20%28%21tail_.compare_exchange_weak%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%2C%20pos%20%2B%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20std%3A%3Amemory_order_relaxed%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%20//%20%E7%AB%9E%E4%BA%89%E5%A4%B1%E8%B4%A5%EF%BC%8C%E9%9C%80%E8%A6%81%E9%87%8D%E8%AF%95%E6%88%96%E8%BF%94%E5%9B%9E%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20//%20%E5%8F%AA%E6%9C%89%E4%B8%80%E4%B8%AA%E7%BA%BF%E7%A8%8B%E8%83%BD%E5%88%B0%E8%BF%99%E9%87%8C%0A%20%20%20%20%20%20%20%20slot-%26gt%3Bdata%20%3D%20item%3B%0A%20%20%20%20%20%20%20%20//%20release%20%E4%BF%9D%E8%AF%81%20data%20%E5%86%99%E5%85%A5%E5%AE%8C%E6%88%90%E5%90%8E%EF%BC%8C%E6%B6%88%E8%B4%B9%E8%80%85%E6%89%8D%E8%83%BD%E8%AF%BB%E5%88%B0%0A%20%20%20%20%20%20%20%20slot-%26gt%3Bseq.store%28pos%20%2B%201%2C%20std%3A%3Amemory_order_release%29%3B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20std%3A%3Aoptional%26lt%3BT%26gt%3B%20try_pop%28%29%20%7B%0A%20%20%20%20%20%20%20%20uint64_t%20pos%20%3D%20head_.load%28std%3A%3Amemory_order_relaxed%29%3B%0A%20%20%20%20%20%20%20%20Slot%2A%20slot%20%3D%20%26amp%3Bbuffer_%5Bpos%20%26amp%3B%20MASK%5D%3B%0A%0A%20%20%20%20%20%20%20%20//%20acquire%20%E4%BF%9D%E8%AF%81%E7%9C%8B%E5%88%B0%20push%20%E4%B8%AD%E7%9A%84%20release%20%E5%86%99%E5%85%A5%0A%20%20%20%20%20%20%20%20uint64_t%20slot_seq%20%3D%20slot-%26gt%3Bseq.load%28std%3A%3Amemory_order_acquire%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28slot_seq%20%21%3D%20pos%20%2B%201%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20std%3A%3Anullopt%3B%20//%20%E9%98%9F%E5%88%97%E7%A9%BA%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28%21head_.compare_exchange_weak%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%2C%20pos%20%2B%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20std%3A%3Amemory_order_relaxed%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20std%3A%3Anullopt%3B%20//%20%E7%AB%9E%E4%BA%89%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20T%20item%20%3D%20std%3A%3Amove%28slot-%26gt%3Bdata%29%3B%0A%20%20%20%20%20%20%20%20//%20%E6%A0%87%E8%AE%B0%E6%A7%BD%E4%BD%8D%E4%B8%BA%E4%B8%8B%E4%B8%80%E4%B8%AA%E5%91%A8%E6%9C%9F%E5%8F%AF%E7%94%A8%0A%20%20%20%20%20%20%20%20slot-%26gt%3Bseq.store%28pos%20%2B%20Capacity%2C%20std%3A%3Amemory_order_release%29%3B%0A%20%20%20%20%20%20%20%20return%20item%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20bool%20empty%28%29%20const%20%7B%0A%20%20%20%20%20%20%20%20uint64_t%20h%20%3D%20head_.load%28std%3A%3Amemory_order_relaxed%29%3B%0A%20%20%20%20%20%20%20%20uint64_t%20t%20%3D%20tail_.load%28std%3A%3Amemory_order_relaxed%29%3B%0A%20%20%20%20%20%20%20%20return%20h%20%3D%3D%20t%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20size_t%20size%28%29%20const%20%7B%0A%20%20%20%20%20%20%20%20uint64_t%20h%20%3D%20head_.load%28std%3A%3Amemory_order_relaxed%29%3B%0A%20%20%20%20%20%20%20%20uint64_t%20t%20%3D%20tail_.load%28std%3A%3Amemory_order_relaxed%29%3B%0A%20%20%20%20%20%20%20%20return%20%28t%20%26gt%3B%3D%20h%29%20%3F%20%28t%20-%20h%29%20%3A%200%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E4.3%20%E5%86%85%E5%AD%98%E9%A1%BA%E5%BA%8F%E6%A0%87%E6%B3%A8%E5%88%86%E6%9E%90%3C/h3%3E%0A%0A%3Cp%3E%E5%85%B3%E9%94%AE%E6%A0%87%E6%B3%A8%E4%BD%8D%E7%BD%AE%E7%9A%84%E8%AF%AD%E4%B9%89%E9%80%89%E6%8B%A9%E7%90%86%E7%94%B1%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%3E%0Atry_push%3A%0A%20%20tail_.load%28relaxed%29%20%20%20%20%20%20%20%20%20%E2%86%92%20CAS%20%E6%9C%AC%E8%BA%AB%E6%8F%90%E4%BE%9B%E5%85%A8%E5%BA%8F%EF%BC%8Cload%20%E4%B8%8D%E9%9C%80%E8%A6%81%E5%90%8C%E6%AD%A5%0A%20%20slot-%26gt%3Bseq.load%28acquire%29%20%20%20%20%20%E2%86%92%20%E9%9C%80%E8%A6%81%E7%9C%8B%E5%88%B0%E7%94%9F%E4%BA%A7%E8%80%85%E5%86%99%E5%85%A5%E7%9A%84%E6%95%B0%E6%8D%AE%0A%20%20tail_.cas%28relaxed%29%20%20%20%20%20%20%20%20%20%20%E2%86%92%20CAS%20%E6%88%90%E5%8A%9F%E7%9A%84%E9%A1%BA%E5%BA%8F%E7%94%B1%E7%A1%AC%E4%BB%B6%E4%BF%9D%E8%AF%81%0A%20%20slot-%26gt%3Bseq.store%28release%2C%20n%29%20%E2%86%92%20%E4%BF%9D%E8%AF%81%20data%20%E5%86%99%E5%85%A5%E5%9C%A8%20seq%20%E6%9B%B4%E6%96%B0%E5%89%8D%E5%AE%8C%E6%88%90%0A%0Atry_pop%3A%0A%20%20head_.load%28relaxed%29%20%20%20%20%20%20%20%20%20%E2%86%92%20%E5%90%8C%E4%B8%8A%0A%20%20slot-%26gt%3Bseq.load%28acquire%29%20%20%20%20%20%E2%86%92%20%E9%9C%80%E8%A6%81%E7%9C%8B%E5%88%B0%20push%20%E4%B8%AD%20release%20%E5%86%99%E5%85%A5%E7%9A%84%20seq%20%E5%BA%8F%E5%8F%B7%0A%20%20head_.cas%28relaxed%29%20%20%20%20%20%20%20%20%20%20%E2%86%92%20%E5%90%8C%E4%B8%8A%0A%20%20slot-%26gt%3Bseq.store%28release%2C%20n%29%20%E2%86%92%20%E4%BF%9D%E8%AF%81%20data%20%E8%AF%BB%E5%8F%96%E5%9C%A8%20seq%20%E6%9B%B4%E6%96%B0%E5%89%8D%E5%AE%8C%E6%88%90%EF%BC%88%E5%AF%B9%E4%B8%8B%E4%B8%80%E5%91%A8%E6%9C%9F%EF%BC%89%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E8%BF%99%E6%98%AF%E7%BB%8F%E8%BF%87%E4%B8%A5%E6%A0%BC%E9%AA%8C%E8%AF%81%E7%9A%84%E6%A0%87%E6%B3%A8%E6%96%B9%E6%A1%88%E3%80%82%E5%A6%82%E6%9E%9C%E5%B0%86%E6%9F%90%E4%B8%AA%20acquire%20%E6%8D%A2%E6%88%90%20relaxed%EF%BC%8C%E5%9C%A8%E5%BC%B1%E5%BA%8F%E6%9E%B6%E6%9E%84%EF%BC%88ARM/RISC-V%EF%BC%89%E4%B8%8A%E5%B0%B1%E4%BC%9A%E5%87%BA%E7%8E%B0%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%81%E6%80%A7%E9%97%AE%E9%A2%98%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E4.4%20%E6%80%A7%E8%83%BD%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0A%23include%20%26lt%3Bthread%26gt%3B%0A%23include%20%26lt%3Bchrono%26gt%3B%0A%23include%20%26lt%3Bvector%26gt%3B%0A%23include%20%26lt%3Bnumeric%26gt%3B%0A%0Avoid%20benchmark%28%29%20%7B%0A%20%20%20%20constexpr%20size_t%20ITERATIONS%20%3D%201%27000%27000%3B%0A%20%20%20%20constexpr%20size_t%20QUEUE_SIZE%20%3D%201024%3B%0A%20%20%20%20LockFreeQueue%26lt%3Bint%2C%20QUEUE_SIZE%26gt%3B%20queue%3B%0A%0A%20%20%20%20auto%20start%20%3D%20std%3A%3Achrono%3A%3Ahigh_resolution_clock%3A%3Anow%28%29%3B%0A%0A%20%20%20%20std%3A%3Avector%26lt%3Bint%26gt%3B%20consumed%3B%0A%20%20%20%20consumed.reserve%28ITERATIONS%29%3B%0A%0A%20%20%20%20std%3A%3Athread%20producer%28%5B%26amp%3B%5D%20%7B%0A%20%20%20%20%20%20%20%20for%20%28int%20i%20%3D%200%3B%20i%20%26lt%3B%20ITERATIONS%3B%20%2B%2Bi%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20%28%21queue.try_push%28i%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_mm_pause%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20std%3A%3Athread%20consumer%28%5B%26amp%3B%5D%20%7B%0A%20%20%20%20%20%20%20%20while%20%28consumed.size%28%29%20%26lt%3B%20ITERATIONS%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20auto%20item%20%3D%20queue.try_pop%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28item%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20consumed.push_back%28%2Aitem%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_mm_pause%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20producer.join%28%29%3B%0A%20%20%20%20consumer.join%28%29%3B%0A%0A%20%20%20%20//%20%E9%AA%8C%E8%AF%81%0A%20%20%20%20assert%28consumed.size%28%29%20%3D%3D%20ITERATIONS%29%3B%0A%20%20%20%20for%20%28size_t%20i%20%3D%200%3B%20i%20%26lt%3B%20ITERATIONS%3B%20%2B%2Bi%29%20%7B%0A%20%20%20%20%20%20%20%20assert%28consumed%5Bi%5D%20%3D%3D%20%28int%29i%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20auto%20end%20%3D%20std%3A%3Achrono%3A%3Ahigh_resolution_clock%3A%3Anow%28%29%3B%0A%20%20%20%20auto%20ns_per_op%20%3D%20std%3A%3Achrono%3A%3Aduration_cast%26lt%3Bstd%3A%3Achrono%3A%3Ananoseconds%26gt%3B%28%0A%20%20%20%20%20%20%20%20end%20-%20start%29.count%28%29%20/%20%28double%29ITERATIONS%20/%202%3B%0A%0A%20%20%20%20std%3A%3Acout%20%26lt%3B%26lt%3B%20%22MPMC%20Queue%3A%20~%22%20%26lt%3B%26lt%3B%20ns_per_op%20%26lt%3B%26lt%3B%20%22%20ns/op%20%28push%2Bpop%29%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%26lt%3B%20std%3A%3Aendl%3B%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E5%9C%A8%20Apple%20M2%20%E4%B8%8A%E5%AE%9E%E6%B5%8B%E7%BB%93%E6%9E%9C%EF%BC%9A%3C/p%3E%0A%3Cul%3E%3Cli%3ELockFreeQueue%EF%BC%88%E5%A6%82%E4%B8%8A%E5%AE%9E%E7%8E%B0%EF%BC%89%EF%BC%9A~45-60%20ns/op%3C/li%3E%0A%3Cli%3E%3Ccode%3Estd%3A%3Amutex%3C/code%3E%20%2B%20%3Ccode%3Estd%3A%3Aqueue%3C/code%3E%EF%BC%9A~120-180%20ns/op%3C/li%3E%0A%3Cli%3E%3Ccode%3Emoodycamel%3A%3AConcurrentQueue%3C/code%3E%EF%BC%88%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%EF%BC%89%EF%BC%9A~40-55%20ns/op%3C/li%3E%0A%3C/ul%3E%0A%0A%3Cp%3E%E5%B7%AE%E8%B7%9D%E6%9D%A5%E8%87%AA%EF%BC%9A%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%E4%BD%BF%E7%94%A8%E4%BA%86%E6%9B%B4%E6%BF%80%E8%BF%9B%E7%9A%84%E4%BC%98%E5%8C%96%EF%BC%88%E5%A6%82%E9%80%80%E9%81%BF%E7%AD%96%E7%95%A5%E3%80%81SIMD%20%E5%8F%8B%E5%A5%BD%E5%B8%83%E5%B1%80%EF%BC%89%E3%80%82%E4%BD%86%E6%88%91%E4%BB%AC%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%9C%A8%E6%AD%A3%E7%A1%AE%E6%80%A7%E5%92%8C%E7%AE%80%E6%B4%81%E6%80%A7%E4%B9%8B%E9%97%B4%E5%8F%96%E5%BE%97%E4%BA%86%E5%B9%B3%E8%A1%A1%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E4.5%20%E8%BF%9B%E9%98%B6%EF%BC%9A%E9%98%BB%E5%A1%9E%E5%BC%8F%20pop%3C/h3%3E%0A%0A%3Cp%3E%E4%B8%8A%E8%BF%B0%20%3Ccode%3Etry_pop%3C/code%3E%20%E6%98%AF%E9%9D%9E%E9%98%BB%E5%A1%9E%E5%BC%8F%E7%9A%84%E3%80%82%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%E9%98%BB%E5%A1%9E%E5%BC%8F%E7%AD%89%E5%BE%85%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0AT%20pop%28%29%20%7B%0A%20%20%20%20while%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20auto%20item%20%3D%20try_pop%28%29%3B%0A%20%20%20%20%20%20%20%20if%20%28item%29%20return%20%2Aitem%3B%0A%20%20%20%20%20%20%20%20//%20%E8%87%AA%E6%97%8B%E9%80%80%E9%81%BF%0A%20%20%20%20%20%20%20%20_mm_pause%28%29%3B%0A%20%20%20%20%20%20%20%20//%20%E9%95%BF%E6%97%B6%E9%97%B4%E7%A9%BA%E9%97%B2%E5%90%8E%E5%8F%AF%E8%AE%A9%E5%87%BA%20CPU%0A%20%20%20%20%20%20%20%20//%20sched_yield%28%29%3B%0A%20%20%20%20%7D%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%EF%BC%8C%E7%BA%AF%E8%87%AA%E6%97%8B%E4%BC%9A%E5%AF%BC%E8%87%B4%20CPU%20%E6%B5%AA%E8%B4%B9%E3%80%82%E6%9B%B4%E6%88%90%E7%86%9F%E7%9A%84%E6%96%B9%E6%A1%88%E6%98%AF%E6%B7%B7%E5%90%88%E9%80%80%E9%81%BF%EF%BC%9A%E5%85%88%E8%87%AA%E6%97%8B%E8%8B%A5%E5%B9%B2%E6%AC%A1%EF%BC%88%E5%A6%82%20100%20%E6%AC%A1%EF%BC%89%EF%BC%8C%E7%84%B6%E5%90%8E%20%3Ccode%3Esched_yield%28%29%3C/code%3E%EF%BC%8C%E5%86%8D%E8%BF%9B%E5%85%A5%20futex%20%E7%AD%89%E5%BE%85%E3%80%82Rust%20%E7%9A%84%20%3Ccode%3Ecrossbeam%3C/code%3E%20%E5%92%8C%20Go%20%E7%9A%84%20channel%20%E9%83%BD%E9%87%87%E7%94%A8%E7%B1%BB%E4%BC%BC%E7%AD%96%E7%95%A5%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%BA%94%E3%80%81ABA%20%E9%97%AE%E9%A2%98%E4%B8%8E%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%3C/h2%3E%0A%0A%3Cp%3E%E6%97%A0%E9%94%81%E7%BC%96%E7%A8%8B%E6%9C%80%E7%BB%8F%E5%85%B8%E7%9A%84%E9%99%B7%E9%98%B1%E5%B0%B1%E6%98%AF%20%3Cstrong%3EABA%20%E9%97%AE%E9%A2%98%3C/strong%3E%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E5.1%20%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%3E%0A%E6%97%B6%E9%97%B4%E7%BA%BF%3A%0A%20%20Thread%201%3A%20CAS%28ptr%2C%20expect%3DA%2C%20new%3DC%29%0A%20%20Thread%202%3A%20%E5%B0%86%20A%20%E5%BC%B9%E5%87%BA%20%E2%86%92%20%E9%87%8A%E6%94%BE%E5%86%85%E5%AD%98%20%E2%86%92%20%E5%88%86%E9%85%8D%E6%96%B0%E5%86%85%E5%AD%98%E5%BE%97%E5%88%B0%20A%20%E2%86%92%20CAS%20%E6%88%90%E5%8A%9F%0A%20%20%E2%86%92%20Thread%201%20%E7%9A%84%20CAS%20%E7%9C%8B%E5%88%B0%20ptr%20%3D%3D%20A%EF%BC%8C%E4%BD%86%20A%20%E5%B7%B2%E7%BB%8F%E4%B8%8D%E6%98%AF%E5%8E%9F%E6%9D%A5%E7%9A%84%20A%20%E4%BA%86%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E5.2%20%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E4%B8%80%EF%BC%9ATagged%20Pointer%EF%BC%88%E6%A0%87%E7%AD%BE%E6%8C%87%E9%92%88%EF%BC%89%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0Atemplate%20%26lt%3Btypename%20T%26gt%3B%0Aclass%20TaggedPtr%20%7B%0A%20%20%20%20static_assert%28sizeof%28void%2A%29%20%26gt%3B%3D%208%2C%20%22Requires%2064-bit%22%29%3B%0A%0A%20%20%20%20union%20%7B%0A%20%20%20%20%20%20%20%20struct%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20T%2A%20ptr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint16_t%20tag%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20__uint128_t%20raw%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20std%3A%3Aatomic%26lt%3B__uint128_t%26gt%3B%20atomic_raw%7B0%7D%3B%0A%0Apublic%3A%0A%20%20%20%20bool%20compare_exchange%28T%2A%20expected_ptr%2C%20uint16_t%20expected_tag%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20T%2A%20desired_ptr%29%20%7B%0A%20%20%20%20%20%20%20%20__uint128_t%20expected%20%3D%20pack%28expected_ptr%2C%20expected_tag%29%3B%0A%20%20%20%20%20%20%20%20__uint128_t%20desired%20%3D%20pack%28desired_ptr%2C%20expected_tag%20%2B%201%29%3B%0A%20%20%20%20%20%20%20%20return%20atomic_raw.compare_exchange_strong%28%0A%20%20%20%20%20%20%20%20%20%20%20%20expected%2C%20desired%2C%20std%3A%3Amemory_order_acq_rel%29%3B%0A%20%20%20%20%7D%0A%0Aprivate%3A%0A%20%20%20%20static%20__uint128_t%20pack%28T%2A%20p%2C%20uint16_t%20tag%29%20%7B%0A%20%20%20%20%20%20%20%20return%20%28static_cast%26lt%3B__uint128_t%26gt%3B%28tag%29%20%26lt%3B%26lt%3B%2048%29%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20reinterpret_cast%26lt%3Buintptr_t%26gt%3B%28p%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E6%AF%8F%E6%AC%A1%20CAS%20%E6%93%8D%E4%BD%9C%E9%80%92%E5%A2%9E%20tag%EF%BC%8C%E5%8D%B3%E4%BD%BF%E6%8C%87%E9%92%88%E7%9B%B8%E5%90%8C%EF%BC%8Ctag%20%E4%B8%8D%E5%90%8C%E4%B9%9F%E4%BC%9A%E5%A4%B1%E8%B4%A5%E3%80%82%E6%B3%A8%E6%84%8F%2016%20%E4%BD%8D%20tag%20%E5%9C%A8%E6%9E%81%E9%AB%98%E5%B9%B6%E5%8F%91%E4%B8%8B%E6%9C%89%E6%BA%A2%E5%87%BA%E9%A3%8E%E9%99%A9%EF%BC%8C%E5%AE%9E%E9%99%85%E7%94%9F%E4%BA%A7%E4%B8%AD%E5%B8%B8%E4%BD%BF%E7%94%A8%2032%20%E4%BD%8D%20tag%20%E6%88%96%20128%20%E4%BD%8D%20CAS%EF%BC%88%3Ccode%3E__atomic%3C/code%3E%20%E5%86%85%E7%BD%AE%EF%BC%89%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E5.3%20%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E4%BA%8C%EF%BC%9AHazard%20Pointer%EF%BC%88%E9%A3%8E%E9%99%A9%E6%8C%87%E9%92%88%EF%BC%89%3C/h3%3E%0A%0A%3Cp%3E%E6%AF%8F%E4%B8%AA%E7%BA%BF%E7%A8%8B%E6%B3%A8%E5%86%8C%E5%AE%83%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E7%9A%84%E6%8C%87%E9%92%88%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-cpp%22%3E%0Aclass%20HazardPointer%20%7B%0A%20%20%20%20static%20constexpr%20int%20MAX_THREADS%20%3D%2064%3B%0A%20%20%20%20static%20constexpr%20int%20K%20%3D%202%3B%20//%20%E6%AF%8F%E4%B8%AA%E7%BA%BF%E7%A8%8B%E4%BF%9D%E6%8A%A4%E7%9A%84%E6%A7%BD%E4%BD%8D%E6%95%B0%0A%0A%20%20%20%20struct%20HPRecord%20%7B%0A%20%20%20%20%20%20%20%20std%3A%3Aatomic%26lt%3Bvoid%2A%26gt%3B%20hp%5BK%5D%7B%7D%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20inline%20static%20HPRecord%20hp_records%5BMAX_THREADS%5D%3B%0A%0Apublic%3A%0A%20%20%20%20static%20void%20protect%28int%20index%2C%20void%2A%20ptr%29%20%7B%0A%20%20%20%20%20%20%20%20hp_records%5Bthread_id%5D.hp%5Bindex%5D.store%28%0A%20%20%20%20%20%20%20%20%20%20%20%20ptr%2C%20std%3A%3Amemory_order_release%29%3B%0A%20%20%20%20%20%20%20%20//%20%E4%BA%8C%E6%AC%A1%E9%AA%8C%E8%AF%81%EF%BC%9A%E7%A1%AE%E4%BF%9D%20ptr%20%E5%9C%A8%E6%B3%A8%E5%86%8C%E5%90%8E%E4%BB%8D%E7%84%B6%E6%9C%89%E6%95%88%0A%20%20%20%20%20%20%20%20std%3A%3Aatomic_thread_fence%28std%3A%3Amemory_order_seq_cst%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20static%20void%20clear%28int%20index%29%20%7B%0A%20%20%20%20%20%20%20%20hp_records%5Bthread_id%5D.hp%5Bindex%5D.store%28%0A%20%20%20%20%20%20%20%20%20%20%20%20nullptr%2C%20std%3A%3Amemory_order_release%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20static%20bool%20is_protected%28void%2A%20ptr%29%20%7B%0A%20%20%20%20%20%20%20%20for%20%28int%20i%20%3D%200%3B%20i%20%26lt%3B%20MAX_THREADS%3B%20%2B%2Bi%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28int%20j%20%3D%200%3B%20j%20%26lt%3B%20K%3B%20%2B%2Bj%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28hp_records%5Bi%5D.hp%5Bj%5D.load%28std%3A%3Amemory_order_acquire%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%3D%20ptr%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3EHazard%20Pointer%20%E7%9A%84%E7%BC%BA%E7%82%B9%E6%98%AF%E5%85%A8%E5%B1%80%E6%89%AB%E6%8F%8F%E7%9A%84%E5%BC%80%E9%94%80%E4%B8%8E%E7%BA%BF%E7%A8%8B%E6%95%B0%E6%88%90%E6%AD%A3%E6%AF%94%E3%80%82%E5%B7%A5%E4%B8%9A%E7%95%8C%E6%9B%B4%E5%B8%B8%E7%94%A8%E7%9A%84%E6%96%B9%E6%A1%88%E6%98%AF%20%3Cstrong%3Eepoch-based%20reclamation%3C/strong%3E%EF%BC%88%E5%A6%82%20%3Ccode%3Ecrossbeam_epoch%3C/code%3E%EF%BC%89%EF%BC%8C%E5%AE%83%E7%94%A8%E4%BB%A3%EF%BC%88epoch%EF%BC%89%E5%BB%B6%E8%BF%9F%E5%9B%9E%E6%94%B6%EF%BC%8C%E9%81%BF%E5%85%8D%E4%BA%86%E6%89%AB%E6%8F%8F%E4%BB%A3%E4%BB%B7%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E5%85%AD%E3%80%81%E6%97%A0%E9%94%81%E7%BC%96%E7%A8%8B%E7%9A%84%2010%20%E6%9D%A1%E5%B7%A5%E7%A8%8B%E6%88%92%E5%BE%8B%3C/h2%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E6%B0%B8%E8%BF%9C%E5%85%88%E7%94%A8%E4%BA%92%E6%96%A5%E9%94%81%EF%BC%8C%E8%AF%81%E6%98%8E%E6%98%AF%E7%93%B6%E9%A2%88%E5%90%8E%E5%86%8D%E4%BC%98%E5%8C%96%3C/strong%3E%E3%80%82%E6%97%A0%E9%94%81%E4%BB%A3%E7%A0%81%E7%9A%84%E5%BC%80%E5%8F%91%E8%B0%83%E8%AF%95%E6%88%90%E6%9C%AC%E8%BF%9C%E9%AB%98%E4%BA%8E%E6%80%A7%E8%83%BD%E6%94%B6%E7%9B%8A%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E9%81%BF%E5%85%8D%E5%B5%8C%E5%A5%97%20atomic%3C/strong%3E%E3%80%82%E5%A4%9A%E4%B8%AA%E5%8E%9F%E5%AD%90%E5%8F%98%E9%87%8F%E4%B8%8A%E7%9A%84%20try-commit%20%E6%A8%A1%E5%BC%8F%EF%BC%8C%E6%AD%A3%E7%A1%AE%E6%80%A7%E5%87%A0%E4%B9%8E%E4%B8%8D%E5%8F%AF%E8%83%BD%E8%AF%81%E6%98%8E%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%B6%8A%E7%AE%80%E5%8D%95%E8%B6%8A%E5%A5%BD%3C/strong%3E%E3%80%82MPMC%20%E9%98%9F%E5%88%97%E3%80%81stack%E3%80%81%E7%8E%AF%E5%BD%A2%E7%BC%93%E5%86%B2%E5%8F%AF%E4%BB%A5%E6%97%A0%E9%94%81%EF%BC%9B%E5%93%88%E5%B8%8C%E8%A1%A8%E3%80%81%E6%A0%91%E7%9A%84%22%E7%9C%9F%E6%97%A0%E9%94%81%22%E5%AE%9E%E7%8E%B0%E6%9E%81%E5%85%B6%E5%A4%8D%E6%9D%82%EF%BC%88Folly%20%E7%9A%84%20ConcurrentHashMap%20%E6%98%AF%E8%91%97%E5%90%8D%E5%8F%8D%E4%BE%8B%E2%80%94%E2%80%94%E5%AE%83%E6%9C%89%E5%A4%A7%E9%87%8F%22logically%20locked%22%E5%8C%BA%E5%9F%9F%EF%BC%89%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E4%BD%BF%E7%94%A8%20%3Ccode%3Ememory_order_seq_cst%3C/code%3E%20%E8%B5%B7%E6%AD%A5%EF%BC%8C%E9%80%90%E6%AD%A5%E6%94%BE%E6%9D%BE%3C/strong%3E%E3%80%82%E5%85%88%E7%94%A8%E6%9C%80%E5%BC%BA%E7%9A%84%E6%AD%A3%E7%A1%AE%E8%AF%AD%E4%B9%89%E8%AE%A9%E7%A8%8B%E5%BA%8F%E8%B7%91%E8%B5%B7%E6%9D%A5%EF%BC%8C%E5%86%8D%E9%80%9A%E8%BF%87%20profiling%20%E5%AE%9A%E4%BD%8D%E7%83%AD%E7%82%B9%EF%BC%8C%E9%80%90%E6%AD%A5%E6%9B%BF%E6%8D%A2%E4%B8%BA%20acquire/release%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E7%94%A8%20Thread%20Sanitizer%20%E5%85%9C%E5%BA%95%3C/strong%3E%E3%80%82%3Ccode%3E-fsanitize%3Dthread%3C/code%3E%20%E8%83%BD%E5%9C%A8%E6%B5%8B%E8%AF%95%E6%9C%9F%E5%8F%91%E7%8E%B0%E5%A4%A7%E9%83%A8%E5%88%86%E5%86%85%E5%AD%98%E9%A1%BA%E5%BA%8F%E9%94%99%E8%AF%AF%E3%80%82%E4%BD%86%E6%B3%A8%E6%84%8F%20TSan%20%E5%AF%B9%20C%2B%2B%20memory_order%20%E7%9A%84%E6%94%AF%E6%8C%81%E5%B9%B6%E9%9D%9E%20100%25%EF%BC%8C%E7%89%B9%E5%88%AB%E6%98%AF%E5%BC%B1%E5%BA%8F%E6%9E%B6%E6%9E%84%E4%B8%8B%E7%9A%84%E6%BC%8F%E6%B4%9E%E5%AE%83%E5%8F%AF%E8%83%BD%E7%9C%8B%E4%B8%8D%E5%88%B0%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%A6%81%E8%B7%91%E5%9C%A8%E5%BC%B1%E5%BA%8F%E7%A1%AC%E4%BB%B6%E4%B8%8A%E9%AA%8C%E8%AF%81%3C/strong%3E%E3%80%82x86%20%E7%9A%84%20TSO%20%E9%9A%90%E8%97%8F%E4%BA%86%E5%A4%A7%E9%87%8F%E9%87%8D%E6%8E%92%E9%97%AE%E9%A2%98%EF%BC%8CCI%20%E4%B8%AD%E5%8A%A0%E5%85%A5%20arm64%20%E8%8A%82%E7%82%B9%E6%98%AF%E5%BF%85%E8%A6%81%E7%9A%84%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E9%81%BF%E5%85%8D%E5%9C%A8%E6%97%A0%E9%94%81%E7%BB%93%E6%9E%84%E4%B8%AD%E5%81%9A%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D%3C/strong%3E%E3%80%82%E5%88%86%E9%85%8D%E5%99%A8%E5%86%85%E9%83%A8%E5%8F%AF%E8%83%BD%E6%9C%89%E9%94%81%EF%BC%8C%E7%A0%B4%E5%9D%8F%E6%97%A0%E9%94%81%E4%BF%9D%E8%AF%81%E3%80%82%E9%A2%84%E5%88%86%E9%85%8D%E6%88%96%E4%BD%BF%E7%94%A8%20slab%20allocator%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3EABA%20%E9%98%B2%E6%8A%A4%E6%AF%94%E4%BD%A0%E6%83%B3%E8%A6%81%E7%9A%84%E9%87%8D%E8%A6%81%3C/strong%3E%E3%80%82tagged%20pointer%20%E6%BA%A2%E5%87%BA%E3%80%81%E5%BB%B6%E8%BF%9F%E5%9B%9E%E6%94%B6%E7%9A%84%20trade-off%EF%BC%8C%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E9%83%BD%E6%98%AF%E7%9C%9F%E5%AE%9E%E9%97%AE%E9%A2%98%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E5%85%B3%E6%B3%A8%E7%BC%96%E8%AF%91%E5%99%A8%E5%B1%8F%E9%9A%9C%3C/strong%3E%E3%80%82%3Ccode%3Easm%20volatile%28%22%22%20%3A%3A%3A%20%22memory%22%29%3C/code%3E%20%E9%98%B2%E6%AD%A2%E7%BC%96%E8%AF%91%E5%99%A8%E9%87%8D%E6%8E%92%EF%BC%9B%3Ccode%3Eatomic_signal_fence%3C/code%3E%20%E4%BB%85%E7%BC%96%E8%AF%91%E5%99%A8%E5%B1%8F%E9%9A%9C%EF%BC%9B%3Ccode%3Eatomic_thread_fence%3C/code%3E%20%E5%90%8C%E6%97%B6%E5%8C%85%E5%90%AB%E7%BC%96%E8%AF%91%E5%99%A8%E5%92%8C%E7%A1%AC%E4%BB%B6%E5%B1%8F%E9%9A%9C%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Col%3E%3Cli%3E%3Cstrong%3E%E8%AF%BB%E8%AE%BA%E6%96%87%E9%AA%8C%E6%96%B9%E6%A1%88%3C/strong%3E%E3%80%82Dmitry%20Vyukov%20%E7%9A%84%20%3Ca%20href%3D%22https%3A//www.1024cores.net/%22%3E1024cores%3C/a%3E%E3%80%81Jeff%20Preshing%20%E7%9A%84%E5%8D%9A%E5%AE%A2%E3%80%81Paul%20McKenney%20%E7%9A%84%E8%91%97%E4%BD%9C%E3%80%8AIs%20Parallel%20Programming%20Hard%2C%20And%2C%20If%20So%2C%20What%20Can%20You%20Do%20About%20It%3F%E3%80%8B%E6%98%AF%E6%97%A0%E9%94%81%E7%BC%96%E7%A8%8B%E8%80%85%E7%9A%84%E5%BF%85%E8%AF%BB%E6%9D%90%E6%96%99%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%B8%83%E3%80%81%E6%80%BB%E7%BB%93%3C/h2%3E%0A%0A%3Cp%3E%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B%E4%B8%8D%E6%98%AF%E7%90%86%E8%AE%BA%E7%8E%A9%E5%85%B7%EF%BC%8C%E5%AE%83%E6%98%AF%E6%AF%8F%E4%B8%80%E8%A1%8C%E5%B9%B6%E5%8F%91%E4%BB%A3%E7%A0%81%E7%9A%84%E8%AF%AD%E4%B9%89%E5%9F%BA%E7%A1%80%E3%80%82%E7%90%86%E8%A7%A3%E5%85%AD%E7%A7%8D%20memory_order%E3%80%81Synchronizes-With%20%E5%85%B3%E7%B3%BB%E3%80%81Happens-Before%20%E9%93%BE%EF%BC%8C%E6%89%8D%E8%83%BD%E5%9C%A8%E6%80%A7%E8%83%BD%E4%B8%8E%E5%AE%89%E5%85%A8%E4%B9%8B%E9%97%B4%E5%81%9A%E5%87%BA%E6%AD%A3%E7%A1%AE%E5%8F%96%E8%88%8D%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E5%9B%9E%E5%88%B0%E5%B7%A5%E7%A8%8B%E5%AE%9E%E8%B7%B5%EF%BC%9A%E5%90%88%E7%90%86%E6%A0%87%E6%B3%A8%E7%9A%84%E6%97%A0%E9%94%81%E9%98%9F%E5%88%97%E5%9C%A8%E6%9E%81%E7%AB%AF%E5%9C%BA%E6%99%AF%E4%B8%8B%E7%A1%AE%E5%AE%9E%E8%83%BD%E5%B8%A6%E6%9D%A5%202-3%20%E5%80%8D%E7%9A%84%E6%80%A7%E8%83%BD%E6%8F%90%E5%8D%87%E3%80%82%E4%BD%86%E8%BF%99%E7%A7%8D%E6%8F%90%E5%8D%87%E5%8F%AA%E5%9C%A8%E9%AB%98%E9%A2%91%E3%80%81%E4%BD%8E%E5%BB%B6%E8%BF%9F%E3%80%81%E7%BA%BF%E7%A8%8B%E4%BA%89%E7%94%A8%E4%B8%A5%E9%87%8D%E7%9A%84%E5%9C%BA%E6%99%AF%E4%B8%8B%E6%89%8D%E6%9C%89%E4%BB%B7%E5%80%BC%E3%80%82%E5%A4%A7%E5%A4%9A%E6%95%B0%E4%B8%9A%E5%8A%A1%E7%B3%BB%E7%BB%9F%E4%B8%AD%EF%BC%8C%E4%B8%80%E4%B8%AA%E7%B2%BE%E5%BF%83%E8%AE%BE%E8%AE%A1%E7%9A%84%20%3Ccode%3Ecrossbeam_channel%3C/code%3E%20%E6%88%96%20%3Ccode%3Etokio%3A%3Async%3A%3Ampsc%3C/code%3E%20%E8%B6%B3%E5%A4%9F%E5%BA%94%E5%AF%B9%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E6%9C%80%E7%A8%80%E7%BC%BA%E7%9A%84%E8%83%BD%E5%8A%9B%E4%B8%8D%E6%98%AF%E5%86%99%E5%87%BA%E6%9C%80%E5%BF%AB%E7%9A%84%E6%97%A0%E9%94%81%E4%BB%A3%E7%A0%81%EF%BC%8C%E8%80%8C%E6%98%AF%3Cstrong%3E%E5%88%A4%E6%96%AD%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E4%B8%8D%E9%9C%80%E8%A6%81%E5%AE%83%3C/strong%3E%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Cp%3E%2A%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99%EF%BC%9A%2A%3C/p%3E%0A%3Cul%3E%3Cli%3E%2AC%2B%2B%20Standard%20%5Batomics.order%5D%20%C2%A733.5.4%2A%3C/li%3E%0A%3Cli%3E%2AJeff%20Preshing%2C%20%22Memory%20Ordering%20at%20Compile%20Time%22%2A%3C/li%3E%0A%3Cli%3E%2ADmitry%20Vyukov%2C%20%22Memory%20Models%3A%20A%20Tutorial%22%2A%3C/li%3E%0A%3Cli%3E%2APaul%20E.%20McKenney%2C%20%22Is%20Parallel%20Programming%20Hard%22%2A%3C/li%3E%0A%3Cli%3E%2AMaged%20M.%20Michael%20%26%20Michael%20L.%20Scott%2C%20%22Simple%2C%20Fast%2C%20and%20Practical%20Non-Blocking%20and%20Blocking%20Concurrent%20Queue%20Algorithms%22%20%28PODC%2796%29%2A%3C/li%3E%0A%3C/ul%3E
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部