aboutsummaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test/functionalities/thread/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/thread/main.cpp')
-rw-r--r--packages/Python/lldbsuite/test/functionalities/thread/main.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/functionalities/thread/main.cpp b/packages/Python/lldbsuite/test/functionalities/thread/main.cpp
new file mode 100644
index 000000000000..6a0ea4e0d119
--- /dev/null
+++ b/packages/Python/lldbsuite/test/functionalities/thread/main.cpp
@@ -0,0 +1,50 @@
+#include <condition_variable>
+#include <mutex>
+#include <thread>
+
+std::mutex mutex;
+std::condition_variable cond;
+
+void *
+thread3(void *input)
+{
+ std::unique_lock<std::mutex> lock(mutex);
+ cond.notify_all(); // Set break point at this line.
+ return NULL;
+}
+
+void *
+thread2(void *input)
+{
+ std::unique_lock<std::mutex> lock(mutex);
+ cond.notify_all();
+ cond.wait(lock);
+ return NULL;
+}
+
+void *
+thread1(void *input)
+{
+ std::thread thread_2(thread2, nullptr);
+ thread_2.join();
+
+ return NULL;
+}
+
+int main()
+{
+ std::unique_lock<std::mutex> lock(mutex);
+
+ std::thread thread_1(thread1, nullptr);
+ cond.wait(lock);
+
+ std::thread thread_3(thread3, nullptr);
+ cond.wait(lock);
+
+ lock.unlock();
+
+ thread_1.join();
+ thread_3.join();
+
+ return 0;
+}