opc*_*0de 0 c++ linux multithreading pthreads
我是Linux编程的新手,所以请耐心等待.我有2个线程类型执行不同的操作,所以我希望每个都拥有它自己的互斥锁.这是我正在使用的代码,它好吗?如果不是为什么?
static pthread_mutex_t cs_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t cs_mutex2 = PTHREAD_MUTEX_INITALIZER;
void * Thread1(void * lp)
{
int * sock = (int*)lp;
char buffer[2024];
int bytecount = recv(*sock, buffer, 2048, 0);
while (0 == 0)
{
if ((bytecount ==0) || (bytecount == -1))
{
pthread_mutex_lock(&cs_mutex);
//Some uninteresting operations witch plays with set 1 of global variables;
pthread_mutex_unlock(&cs_mutex);
}
}
}
void * Thread2(void * lp)
{
while (0 == 0)
{
pthread_mutex_lock(&cs_mutex2);
//Some uninteresting operations witch plays with some global variables;
pthread_mutex_unlock(&cs_mutex2);
}
}
Run Code Online (Sandbox Code Playgroud)
通常,互斥锁与线程无关。它确保关键区域只能由单个线程访问。所以如果你有一些共享区域,比如多个线程处理同一个数组,那么你必须确保对这个区域的独占访问。这意味着,您不需要为每个线程设置互斥锁。您需要一个关键区域的互斥锁。
如果你只有一个司机,那么拥有两辆车是没有优势的.您的Thread2代码只能在持有时取得有用的进展cs_mutex2.因此,有多个线程运行该代码是没有意义的.一次只有一个线程可以保存互斥锁,而另一个线程不能执行任何有用的工作.
所以你要完成的是偶尔没有持有互斥锁的线程将尝试运行并且必须等待另一个.有时候,持有互斥锁的线程会试图释放并重新获取它并被另一个抢先占据.
这是线程的完全无意义的使用.