Bonjour,

J'ai besoin de faire du multiphreading, mais quand je trouve quelquechose, il ne fait pas quelque de très simple : gèrer les threads en même temps (cf fork() ), et non pas l'un après l'autre.
Quand je pense que ca marche, c'est juste que le temps est trop court pour que le pc puisse voir la différence.

voici le code que j'ai trouvé pour le moment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
#include <boost/thread/mutex.hpp>
#include <boost/thread/xtime.hpp>
#include <boost/thread/thread.hpp>
#include <iostream>
 
boost::mutex io_mutex; // The iostreams are not guaranteed to be thread-safe!
 
class counter
{
public:
    counter() : count(0) { }
 
    int increment() {
        boost::mutex::scoped_lock scoped_lock(mutex);
        return ++count;
    }
 
private:
    boost::mutex mutex;
    int count;
};
 
counter c;
 
void change_count()
{
    int i = c.increment();
    boost::mutex::scoped_lock scoped_lock(io_mutex);
 
    //D'abord, testez avec les commentaires, puis enlevez les
    // boost::xtime xt;
    //boost::xtime_get(&xt, boost::TIME_UTC);
    //xt.sec += m_secs;
 
    //boost::thread::sleep(xt);
 
    std::cout << "count == " << i << std::endl;
}
 
int main(int, char*[])
{
    const int num_threads = 4;
    boost::thread_group thrds;
    for (int i=0; i < num_threads; ++i)
        thrds.create_thread(&change_count);
 
    thrds.join_all();
 
    return 0;
}
Code très simple montrant bien le problème (je trouve ).