[Support] Add a way to run a function on a detached thread
authorSam McCall <sammccall@google.com>
Wed, 23 Oct 2019 10:36:36 +0000 (12:36 +0200)
committerSam McCall <sammccall@google.com>
Wed, 23 Oct 2019 10:48:38 +0000 (12:48 +0200)
commit40668abca4d307e02b33345cfdb7271549ff48d0
tree8a5fcbf77abeb5a2d362182cef542215e742c0d4
parent4b63ca1379a8a6399c3d29560623ee832c818919
[Support] Add a way to run a function on a detached thread

This roughly mimics `std::thread(...).detach()` except it allows to
customize the stack size. Required for https://reviews.llvm.org/D50993.

I've decided against reusing the existing `llvm_execute_on_thread` because
it's not obvious what to do with the ownership of the passed
function/arguments:

1. If we pass possibly owning functions data to `llvm_execute_on_thread`,
   we'll lose the ability to pass small non-owning non-allocating functions
   for the joining case (as it's used now). Is it important enough?
2. If we use the non-owning interface in the new use case, we'll force
   clients to transfer ownership to the spawned thread manually, but
   similar code would still have to exist inside
   `llvm_execute_on_thread(_async)` anyway (as we can't just pass the same
   non-owning pointer to pthreads and Windows implementations, and would be
   forced to wrap it in some structure, and deal with its ownership.

Patch by Dmitry Kozhevnikov!

Differential Revision: https://reviews.llvm.org/D51103
llvm/include/llvm/Support/Threading.h
llvm/lib/Support/Threading.cpp
llvm/lib/Support/Unix/Threading.inc
llvm/lib/Support/Unix/Unix.h
llvm/lib/Support/Windows/Process.inc
llvm/lib/Support/Windows/Threading.inc
llvm/lib/Support/Windows/WindowsSupport.h
llvm/unittests/Support/Threading.cpp