Hi !
Mal folgender sinnloser code
1 Frage :
Bei der Standardausgabe muss ich ja auch einen Mutex setzen, wie z.B. :
Wie lange gilt dieser, für alle std::cout innerhalb einer funktion, nur für die nächste Textausgabe ?!
2. Frage :
Wie kann ich einen kleinen/großen Bereich vor anderen Threads weil ich bei :
So etwas machen müsste, hätte ich 30 oder 40 Threads, so würde er vielleicht nie ( okay, ziemlich spät ) aus der Schleife kommen, weil sich vec.size() ja immer ändert ( +1 ). Ich will den vector aber nur kurz für den Thread sperren, er soll den vector durchlaufen und ihn wieder freigeben ?
3 Frage :
Muss man eigentlich bei boost einen Mutex nicht freigeben ( laut Doku nicht ), was mich wieder zur Frage 2 führt, wie lange ich ein mutex "gültig"
THX
Mal folgender sinnloser code
Code:
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>
#include <iostream>
#include <vector>
boost::mutex io_mutex; // The iostreams are not guaranteed to be thread-safe!
std::vector<int> vec;
void create_random(void)
{
int cmp = 0;
for(int i = 0; i < 100; i++)
{
int value = rand()%100;
cmp = 0;
vec.push_back(value);
boost::mutex::scoped_lock scoped_lock(io_mutex);
std::cout<<"random : "<<value<<std::endl;
std::cout<<"size : "<<vec.size()<<std::endl;
// einfach mal durschlaufen
// hier blockieren, damit sich size nicht ändern kann
for(int d = 0; d < vec.size(); d++)
{
// falls Wert schon im Vector
if(vec.at(d) == value)
// zähler inkrementieren
cmp++;
}
// wie oft kam er vor
std::cout<<"gezählt : "<<cmp<<std::endl;
}
}
int main(void)
{
srand (time(NULL));
boost::thread t1(&create_random);
boost::thread t2(&create_random);
boost::thread t3(&create_random);
t1.join();
t2.join();
t3.join();
return 0;
}
1 Frage :
Bei der Standardausgabe muss ich ja auch einen Mutex setzen, wie z.B. :
Code:
boost::mutex::scoped_lock scoped_lock(io_mutex);
Wie lange gilt dieser, für alle std::cout innerhalb einer funktion, nur für die nächste Textausgabe ?!
2. Frage :
Wie kann ich einen kleinen/großen Bereich vor anderen Threads weil ich bei :
Code:
for(int d = 0; d < vec.size(); d++)
{
// falls Wert schon im Vector
if(vec.at(d) == value)
// zähler inkrementieren
cmp++;
}
// wie oft kam er vor
std::cout<<"gezählt : "<<cmp<<std::endl;
So etwas machen müsste, hätte ich 30 oder 40 Threads, so würde er vielleicht nie ( okay, ziemlich spät ) aus der Schleife kommen, weil sich vec.size() ja immer ändert ( +1 ). Ich will den vector aber nur kurz für den Thread sperren, er soll den vector durchlaufen und ihn wieder freigeben ?
3 Frage :
Muss man eigentlich bei boost einen Mutex nicht freigeben ( laut Doku nicht ), was mich wieder zur Frage 2 führt, wie lange ich ein mutex "gültig"
THX