-
Notifications
You must be signed in to change notification settings - Fork 0
/
mutex.cpp
62 lines (47 loc) · 1.53 KB
/
mutex.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
#include <vector>
using namespace std;
class SimpleThread {
private:
/* Mutex de execução das threads */
mutex hello_mutex;
/*
* Entra em espera por um período de tempo entre 0 e 5 segundos. Ao
* final imprime uma mensagem com o número da thread atual
*/
void HelloMessage (int thread_no) {
this_thread::sleep_for(chrono::milliseconds(rand() % 5000));
hello_mutex.lock();
cout << "Hello from thread: " << thread_no << endl;
hello_mutex.unlock();
}
public:
/* Número máximo de threads */
int N_THREADS = 20;
/*
* Cria uma thread através do módulo std::thread do C++
*/
thread *spawn (int thread_no) {
return new thread(&SimpleThread::HelloMessage, this, thread_no);
}
};
int
main (int argc, char* argv[])
{
/* Cria-se um objeto simples da nossa classe de Threads */
SimpleThread *simple_thread = new SimpleThread();
/* Um array para controlar a lista de threads abertas */
vector<thread *> threads(simple_thread->N_THREADS);
/* Cria uma thread para cada elemento do array */
for(int i = 0; i < simple_thread->N_THREADS; i++) {
threads[i] = simple_thread->spawn(i);
}
/* Para cada thread aguarda o final de sua execução */
for(int i = 0; i < simple_thread->N_THREADS; i++) {
threads[i]->join();
}
return EXIT_SUCCESS;
}