转自:http://topic.csdn.net/u/20110615/17/61004792-AA35-4479-BF48-34D453CBBC65.html 第六楼
线程锁要遵循的原则,所谓的锁,是在要访问的资源上上锁,不是给线程上锁
哪个线程上的锁,就要由哪个线程来解,锁与解锁必须一一对应,避免出现死锁或后面的线程来解前面线程的锁这种撬锁事件
BOOST库有一种自动锁,基于C++,可以看看
容器不支持多线程,必须上锁
#include <stdio.h>
#include <pthread.h>
#define MAX_THREAD_NUM 3 // jernymy
pthread_mutex_t mutex[MAX_THREAD_NUM]; //锁,全局变量
void *thrd_func(void *arg) //线程的函数
{
int nIdx = (int)(int *)arg; // jernymy
pthread_mutex_lock(&mutex[nIdx]); //给线程上锁
printf("%d\n", nIdx);
pthread_exit(NULL);
}
int main(void)
{
pthread_t thread[3];
void *thrd_ret;
int i = 0;
for (i = 0; i < MAX_THREAD_NUM; i++)
{
pthread_mutex_init(&mutex[i], NULL); //初始化线程
}
for(i = 0; i < 3; i++)
{
pthread_create(&thread[i], NULL, thrd_func, (void *)i); //循环来创建三个线程
}
for(i = 0; i < 3; i++)
{
pthread_join(thread[i],&thrd_ret); //循环等待创建的三个线程结束
pthread_mutex_unlock(&mutex[i]); //为线程解锁
}
for (i = 0; i < MAX_THREAD_NUM; i++)
{
pthread_mutex_destroy(&mutex[i]);
}
return 0;
}