diff options
Diffstat (limited to 'content/20210515-pthread_cancel-noexcept/thread.cc')
-rw-r--r-- | content/20210515-pthread_cancel-noexcept/thread.cc | 40 |
1 files changed, 0 insertions, 40 deletions
diff --git a/content/20210515-pthread_cancel-noexcept/thread.cc b/content/20210515-pthread_cancel-noexcept/thread.cc deleted file mode 100644 index 73370be..0000000 --- a/content/20210515-pthread_cancel-noexcept/thread.cc +++ /dev/null @@ -1,40 +0,0 @@ -// file : thread.cc -// compile: g++ thread.cc -o thread -lpthread - -#include <atomic> - -#include <pthread.h> -#include <unistd.h> - -struct S { - ~S() { - const char msg[] = "cancellation-point\n"; - // write() -> pthread cancellation point. - write(STDOUT_FILENO, msg, sizeof(msg)); - } -}; - -std::atomic<bool> gReleaseThread{false}; - -void* threadFn(void*) { - while (!gReleaseThread) {} - - // Hit cancellation point in destructor which - // is implicitly `noexcept`. - S s; - - return nullptr; -} - -int main() { - pthread_t t; - pthread_create(&t, nullptr /* attr */, threadFn, nullptr /* arg */); - - // Cancel thread and release it to hit the cancellation point. - pthread_cancel(t); - gReleaseThread = true; - - pthread_join(t, nullptr /* retval */); - - return 0; -} |