
Voyage mouvementé en perspective?
#include <chrono>
#include <iostream>
int main()
{
auto t1 = std::chrono::system_clock::now();
usleep(100000);
auto t2 = std::chrono::system_clock::now();
std::cout << (t2 - t1).count() << std::endl;
return 0;
}
#include <chrono>
#include <iostream>
int main()
{
auto t1 = std::chrono::system_clock::now();
usleep(100000);
auto t2 = std::chrono::system_clock::now();
std::chrono::nanoseconds n = (t2 - t1);
std::cout << n.count() << std::endl;
std::chrono::microseconds u = (t2 - t1);
std::cout << u.count() << std::endl;
std::chrono::duration<double> d = (t2 - t1);
std::cout << d.count() << std::endl;
return 0;
}
100059000
100059
0.100059
std::chrono::seconds s = (t2 - t1);renvoie le message d'erreur suivant:
error: static assertion failed: "the resulting duration is not exactly representable"En effet, le typedef std::seconds prenant en type de base un entier, la conversion perd en précision. Pour que cela marche, il faut utiliser un double, comme dans l'exemple précédent.
#include <thread>
#include <iostream>
void increment(int & counter)
{
for(size_t i = 0; i < 10000; i++)
{
counter++;
}
}
void decrement(int & counter)
{
for(size_t i = 0; i < 10000; i++)
{
counter--;
}
}
int main()
{
int counter;
std::thread t1(&increment, std::ref(counter));
std::thread t2(&decrement, std::ref(counter));
t1.join();
t2.join();
std::cout << counter << std::endl;
return 0;
}
#include <cstdatomic>
#include <thread>
#include <iostream>
void increment(std::atomic<int> & counter)
{
for(size_t i = 0; i < 10000; i++)
{
counter++;
}
}
void decrement(std::atomic<int> & counter)
{
for(size_t i = 0; i < 10000; i++)
{
counter--;
}
}
int main()
{
std::atomic<int> counter;
std::thread t1(&increment, std::ref(counter));
std::thread t2(&decrement, std::ref(counter));
t1.join();
t2.join();
std::cout << counter << std::endl;
return 0;
}
#include <atomic>
#include <thread>
#include <iostream>
int main()
{
std::atomic<int> counter;
std::thread t1([&counter]()
{for(size_t i = 0; i < 10000; i++) counter++;});
std::thread t2([&counter]()
{for(size_t i = 0; i < 10000; i++) counter--;});
t1.join();
t2.join();
std::cout << counter << std::endl;
return 0;
}