我在Linux中使用pthread。 我想通过设置参数sched_param.priority来提高线程的优先级。 但是,我无法从网上find关于我可以设置的线程优先级的范围,或关于线程优先级的描述的更多信息。 另外,我想知道相对线程的优先级,因为我不想将线程优先级设置得太高而导致OS停止。 有人可以帮我吗?
我正在学习pthread和等待条件。 据我所知,一个典型的等待线程是这样的: pthread_mutex_lock(&m); while(!condition) pthread_cond_wait(&cond, &m); // Thread stuff here pthread_mutex_unlock(&m); 我不明白的是为什么即使我使用pthread_cond_signal()来唤醒线程, while(!condition)也是必需的。 我可以理解,如果我使用pthread_cond_broadcast()我需要testing条件,因为我唤醒了所有等待的线程,其中一个可以使条件再次解锁之前的虚假(从而转移到另一个应执行在那一刻执行)。 但是,如果我使用pthread_cond_signal()我只唤醒一个线程,所以条件必须是真实的。 所以代码可能是这样的: pthread_mutex_lock(&m); pthread_cond_wait(&cond, &m); // Thread stuff here pthread_mutex_unlock(&m); 我读了一些关于可能发生的虚假信号。 这(是唯一的)这个原因吗? 为什么我应该有虚假singnals? 或者还有别的东西我不明白 我假设信号代码是这样的: pthread_mutex_lock(&m); condition = true; pthread_cond_signal(&cond); // Should wake up *one* thread pthread_mutex_unlock(&m);
在linux的c程序中,如何打印由pthread库创build的线程的线程ID? 例如:我们可以通过getpid()获得一个进程的PID,
有什么区别吗? pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 要么 pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); 如果我只使用第一种方法,我是否足够安全? 注:我的问题主要是指非常小的程序,至多我会做的是连接几个客户端到服务器,并解决他们的查询与工作线程。
有什么方法可以在Linux中设置线程的名称? 我的主要目的是debugging时会有帮助,而且如果通过/proc/$PID/task/$TID/…这个名字,
pthread库提供的信号量和互斥量有什么区别?
我在Windows上安装mingw-w64,有两个选项:win32线程和posix线程。 我知道什么是win32线程和pthreads之间的区别,但我不明白这两个选项之间的区别是什么。 我怀疑,如果我会selectposix线程,它会阻止我调用像CreateThread WinAPI函数。 看来这个选项指定哪个线程API将被一些程序或库使用,但是通过什么? 通过海湾合作委员会,libstdc ++或其他? 我发现这个: 在windows的gcc端口thread_posixs和thread_win32之间有什么区别? 总之,对于这个版本的mingw,threads-posix版本将使用posix API并允许使用std :: thread,而threads-win32将使用win32 API,并且禁用std :: thread的部分标准。 好的,如果我将selectwin32线程,那么std :: thread将不可用,但仍将使用win32线程。 但是用什么?
我读了一个地方,我们应该在调用pthread_cond_signal之前locking互斥锁 ,并在调用它之后解锁互斥锁 : pthread_cond_signal()例程用于发送(或唤醒)等待条件variables的另一个线程。 它应该在locking互斥锁之后调用,并且必须解锁互斥锁才能完成pthread_cond_wait()例程。 我的问题是:是不是可以调用pthread_cond_signal或pthread_cond_broadcast方法而不locking互斥锁?
为什么我应该在实践中更喜欢这个或那个? 什么是技术差异,除了std::thread是一个类?
我在读pthread.h ; 与条件variables相关的函数(如pthread_cond_wait(3) )需要一个互斥量作为参数。 为什么? 据我所知,我将创build一个互斥体来作为这个参数? 那个互斥体应该做什么?