Производительность pthread_spinlock_t в 2 раза выше, чем моя собственная реализация со свободным от блокировки std::atomC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Производительность pthread_spinlock_t в 2 раза выше, чем моя собственная реализация со свободным от блокировки std::atom

Сообщение Гость »


Я хотел заменить пример pthread_spinlock_t своей собственной реализацией спин-блокировки. Однако результат моей реализации буквально намного ниже, чем производительность pthread_spinlock_t. Хотя результат pthread_spinlock_t составляет около 0,9 с, моя собственная реализация занимает около 2,4 с. Может ли кто-нибудь объяснить, чего не хватает в моей реализации или какие еще возможности для улучшения? Я считаю, что мне не хватает чего-то, связанного с упорядочиванием памяти. Вот моя реализация ниже

#include #include #include #include #include #include #include #include #define ПЕТЛИ 10000000 использование пространства имен std; список the_list; //pthread_spinlock_t спинблокировка; std::atomic_flag флаг = ATOMIC_FLAG_INIT; pid_t gettid() { return syscall( __NR_gettid ); } void *consumer(void *ptr) { printf("Потребительский TID %lu\n", (unsigned long)gettid()); пока (1) { //pthread_spin_lock(&spinlock); while (flag.test_and_set(std::memory_order_acquire)); если (the_list.empty()) { //pthread_spin_unlock(&spinlock); flag.clear(std::memory_order_release); перерыв; } the_list.front(); the_list.pop_front(); //pthread_spin_unlock(&spinlock); flag.clear(std::memory_order_release); } вернуть НУЛЬ; } интервал основной() { интервал я; pthread_t thr1, thr2; структура timeval tv1, tv2; //pthread_spin_init(&spinlock, 0); // Создание содержимого списка... для (я = 0; я tv2.tv_usec) { tv2.tv_sec--; tv2.tv_usec += 1000000; } printf("Результат - %ld.%ld\n", tv2.tv_sec - tv1.tv_sec, tv2.tv_usec - tv1.tv_usec); //pthread_spin_destroy(&spinlock); вернуть 0; } Я ожидал добиться производительности pthread_spin с помощью своей собственной реализации
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»