fork download
  1. #include <pthread.h>
  2. #include <atomic>
  3. #include <iostream>
  4. #include <sys/time.h>
  5.  
  6. double dwalltime() {
  7. double sec;
  8. struct timeval tv;
  9.  
  10. gettimeofday(&tv,NULL);
  11. sec = tv.tv_sec + tv.tv_usec/1000000.0;
  12. return sec;
  13. }
  14.  
  15. #define ITERATIONS 100000000
  16.  
  17. int main() {
  18. #ifdef USE_PTHREAD
  19. std::cout << "Using pthread\n";
  20. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  21. unsigned counter(0);
  22. double start = dwalltime();
  23. for(unsigned i(0); i < ITERATIONS; ++i) {
  24. pthread_mutex_lock(&mutex);
  25. counter++;
  26. pthread_mutex_unlock(&mutex);
  27. }
  28. double end = dwalltime();
  29. std::cout << "It took me: " << (end - start) << " seconds\n";
  30. #else
  31. std::cout << "Using atomic\n";
  32. std::atomic<unsigned> counter(0);
  33. double start = dwalltime();
  34. for(unsigned i(0); i < ITERATIONS; ++i)
  35. counter++;
  36. double end = dwalltime();
  37. std::cout << "It took me: " << (end - start) << " seconds\n";
  38. #endif
  39. }
  40.  
Success #stdin #stdout 0.82s 2884KB
stdin
Standard input is empty
stdout
Using atomic
It took me: 0.820415 seconds