94a12c6241d90285b3ffcd964b7789229cf9f5a5
[openbsd] /
1 //===-- main.cpp ------------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include <chrono>
10 #include <cstdio>
11 #include <mutex>
12 #include <random>
13 #include <thread>
14
15 #define NUM_OF_THREADS 4
16
17 std::mutex hw_break_mutex;
18
19 void
20 hw_break_function (uint32_t thread_index) {
21   printf ("%s called by Thread #%u...\n", __FUNCTION__, thread_index);
22 }
23
24
25 void
26 thread_func (uint32_t thread_index) {
27   printf ("%s (thread index = %u) starting...\n", __FUNCTION__, thread_index);
28
29   hw_break_mutex.lock();
30   
31   hw_break_function(thread_index); // Call hw_break_function
32
33   hw_break_mutex.unlock();
34 }
35
36
37 int main (int argc, char const *argv[])
38 {
39   std::thread threads[NUM_OF_THREADS]; 
40
41   printf ("Starting thread creation with hardware breakpoint set...\n");
42
43   for (auto &thread : threads)
44     thread = std::thread{thread_func, std::distance(threads, &thread)};
45
46   for (auto &thread : threads)
47     thread.join();
48
49   return 0;
50 }