调试小技巧:统计程序消耗的时间;

互斥量:

pthread_mutex_init()函数对互斥锁进行初始化
- pthread_mutex_t mutex;
- pthread_mutex_init(&mutex, NULL);
- 或者:
- pthread_mutex_t *mutex = malloc(sizeof(pthread_mutex_t));
- pthread_mutex_init(mutex, NULL);
pthread_mutex_lock()可以对互斥锁加锁、获取互斥锁;pthread_mutex_unlock()可以对互斥锁解锁、释放互斥锁;
如果线程不希望被阻塞,可以使用 pthread_mutex_trylock()函数
pthread_mutex_destroy()函数来销毁互斥锁
- // 线程 A
- pthread_mutex_lock(mutex1);
- pthread_mutex_lock(mutex2);
- // 线程 B
- pthread_mutex_lock(mutex2);
- pthread_mutex_lock(mutex1);
pthread_mutex_init()函数初始化互斥锁时可以设置互斥锁的属性
pthread_mutexattr_destroy()将其销毁
pthread_mutexattr_gettype()函数得到互斥锁类型属性,
pthread_mutexattr_settype()修改/设置互斥锁类型属性,
- pthread_mutex_t mutex;
- pthread_mutexattr_t attr;
- /* 初始化互斥锁属性对象 */
- pthread_mutexattr_init(&attr);
- /* 将类型属性设置为 PTHREAD_MUTEX_NORMAL */
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL);
- /* 初始化互斥锁 */
- pthread_mutex_init(&mutex, &attr);
- ......
- /* 使用完之后 */
- pthread_mutexattr_destroy(&attr);
- pthread_mutex_destroy(&mutex);
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <pthread.h>
- #include <unistd.h>
-
- #define THRNUM 4
-
- static pthread_mutex_t mut[THRNUM];
-
- static int next(int n)
- {
- if(n + 1 == THRNUM)
- return 0;
- return n + 1;
- }
-
- static void *thr_func(void *p)
- {
- int c;
- int n = (int)p;
- c = 'a' + n;
- while(1)
- {
- pthread_mutex_lock(mut+n);
- write(1, &c, 1);
- pthread_mutex_unlock(mut+next(n));
- }
- pthread_exit(NULL);
- }
-
- int main()
- {
- pthread_t tid[THRNUM];
- int i, err;
-
- for(i = 0; i < THRNUM; i++)
- {
-
- pthread_mutex_init(mut+i, NULL);
- pthread_mutex_lock(mut+i);
-
- err = pthread_create(tid+i, NULL, thr_func, (void *)i);
- if(err)
- {
- fprintf(stderr, "pthread_create():%s\n", strerror(err));
- exit(1);
- }
- }
-
- pthread_mutex_unlock(mut+0);
-
- alarm(2 );
-
- for(i = 0; i < THRNUM; i++)
- pthread_join(tid[i], NULL);
-
-
- exit(0);
- }