diff --git a/Makefile b/Makefile index e489164..3cf52ea 100644 --- a/Makefile +++ b/Makefile @@ -79,7 +79,7 @@ ifeq ($(CXX_IS_CLANG),true) CLANG_WORKS := true endif else - ifneq ($(shell test $(CXX_VERSION_MAJOR) -lt 10; echo $$?),0) + ifneq ($(shell test $(CXX_VERSION_MAJOR) -lt 11; echo $$?),0) GCC_WORKS := true endif endif diff --git a/README.md b/README.md index fdd4c31..f76fba7 100644 --- a/README.md +++ b/README.md @@ -354,7 +354,7 @@ If you have an AMD GPU `rocm_smi_lib` is required, which may or may not be packa ## Compilation Linux - Requires at least GCC 10 or Clang 16. + Requires at least GCC 11 or Clang 16. The makefile also needs GNU coreutils and `sed` (should already be installed on any modern distribution). @@ -552,7 +552,7 @@ If you have an AMD GPU `rocm_smi_lib` is required, which may or may not be packa ## Compilation macOS OSX - Requires at least GCC 10 or Clang 16. + Requires at least GCC 11 or Clang 16. With GCC, version 12 (or better) is needed for macOS Ventura. If you get linker errors on Ventura you'll need to upgrade your command line tools (Version 14.0) is bugged. @@ -723,7 +723,7 @@ If you have an AMD GPU `rocm_smi_lib` is required, which may or may not be packa ## Compilation FreeBSD - Requires at least GCC 10 or Clang 16. + Requires at least GCC 11 or Clang 16. Note that GNU make (`gmake`) is required to compile on FreeBSD. @@ -904,7 +904,7 @@ If you have an AMD GPU `rocm_smi_lib` is required, which may or may not be packa ## Compilation OpenBSD - Requires at least GCC 10. + Requires at least GCC 11. Note that GNU make (`gmake`) is required to compile on OpenBSD. diff --git a/src/btop.cpp b/src/btop.cpp index 8eae107..72bade5 100644 --- a/src/btop.cpp +++ b/src/btop.cpp @@ -33,17 +33,13 @@ tab-size = 4 #include #include #include +#include #include #ifdef __APPLE__ #include #include #include #endif -#if !defined(__clang__) && __GNUC__ < 11 - #include -#else - #include -#endif #include "btop_shared.hpp" #include "btop_tools.hpp" @@ -424,18 +420,7 @@ namespace Runner { atomic redraw (false); atomic coreNum_reset (false); - //* Setup semaphore for triggering thread to do work -#if !defined(__clang__) && __GNUC__ < 11 - sem_t do_work; - inline void thread_sem_init() { sem_init(&do_work, 0, 0); } - inline void thread_wait() { sem_wait(&do_work); } - inline void thread_trigger() { sem_post(&do_work); } -#else - std::binary_semaphore do_work(0); - inline void thread_sem_init() { ; } - inline void thread_wait() { do_work.acquire(); } - inline void thread_trigger() { do_work.release(); } -#endif + std::binary_semaphore sem { 0 }; //* RAII wrapper for pthread_mutex locking class thread_lock { @@ -553,7 +538,7 @@ namespace Runner { //* ----------------------------------------------- THREAD LOOP ----------------------------------------------- while (not Global::quitting) { - thread_wait(); + sem.acquire(); atomic_wait_for(active, true, 5000); if (active) { Global::exit_error_msg = "Runner thread failed to get active lock!"; @@ -840,7 +825,7 @@ namespace Runner { if (Menu::active and not current_conf.background_update) Global::overlay.clear(); - thread_trigger(); + sem.release(); atomic_wait_for(active, false, 10); } @@ -868,7 +853,7 @@ namespace Runner { clean_quit(1); } } - thread_trigger(); + sem.release(); atomic_wait_for(active, false, 100); atomic_wait_for(active, true, 100); } @@ -1077,7 +1062,6 @@ int main(int argc, char **argv) { pthread_sigmask(SIG_BLOCK, &mask, &Input::signal_mask); //? Start runner thread - Runner::thread_sem_init(); if (pthread_create(&Runner::runner_id, nullptr, &Runner::_runner, nullptr) != 0) { Global::exit_error_msg = "Failed to create _runner thread!"; clean_quit(1);