b62f5ea850
## Summary of the Pull Request This PR adds the `til::spsc` namespace, which implements a lock-free, single-producer, single-consumer FIFO queue ("channel"). The queue efficiently blocks the caller using Futexes if no data can be written to / read from the queue (e.g. using `WaitOnAddress` on Windows). Furthermore it allows batching of data and contains logic to signal the caller if the other side has been dropped/destructed. ## PR Checklist * [ ] Closes #xxx * [x] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA * [x] Tests added/passed * [ ] Documentation updated. If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx * [ ] Schema updated. * [x] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx ## Detailed Description of the Pull Request / Additional comments `til::spsc::details::arc<T>` contains most of the queue's logic and as such has the relevant documentation for its design. ## Validation Steps Performed The queue was tested on Windows, Linux and macOS using MSVC, gcc and llvm and each of their available runtime introspection utilities in order to ensure no race conditions or memory leaks occur.
45 lines
384 B
Plaintext
45 lines
384 B
Plaintext
ACCEPTFILES
|
|
ACCESSDENIED
|
|
alignof
|
|
bitfield
|
|
bitfields
|
|
CLASSNOTAVAILABLE
|
|
EXPCMDFLAGS
|
|
EXPCMDSTATE
|
|
fullkbd
|
|
futex
|
|
href
|
|
IAsync
|
|
IBind
|
|
IBox
|
|
IClass
|
|
IComparable
|
|
ICustom
|
|
IDialog
|
|
IDirect
|
|
IExplorer
|
|
IMap
|
|
IObject
|
|
IStorage
|
|
LCID
|
|
LSHIFT
|
|
NCHITTEST
|
|
NCLBUTTONDBLCLK
|
|
NCRBUTTONDBLCLK
|
|
NOAGGREGATION
|
|
NOREDIRECTIONBITMAP
|
|
oaidl
|
|
ocidl
|
|
PAGESCROLL
|
|
RETURNCMD
|
|
rfind
|
|
roundf
|
|
RSHIFT
|
|
rx
|
|
SIZENS
|
|
spsc
|
|
STDCPP
|
|
syscall
|
|
tmp
|
|
tx
|