#include #include #include #include #include #include pthread_mutex_t print_mtx; class IThread { public: private: virtual void* _run() = 0; static void* _staticRun(void* context) { return static_cast(context)->_run(); } }; void printer(std::string a) { pthread_mutex_lock(&print_mtx); std::cout << a << std::endl; pthread_mutex_unlock(&print_mtx); } void* foo(void* arg) { unsigned int i = 100; for(;i > 0; i--){ std::string a = "foo cnt: "; a += std::to_string(i); printer(a); sleep(1); } } void* baa(void* arg) { unsigned int i = 5; for(;i > 0; i--){ std::string a = "baa cnt: "; a += std::to_string(i); printer(a); sleep(10); } } int main() { pthread_t foo_th, baa_th; pthread_mutex_init(&print_mtx, NULL); pthread_create(&foo_th, NULL, foo, NULL); pthread_create(&baa_th, NULL, baa, NULL); pthread_join(foo_th, NULL); pthread_join(baa_th, NULL); return 0; }