这两天考虑互斥锁的原理,做了一些代码测试,反倒越来越迷惑了。
Test类模拟单例类,为了让多个线程并发,添加了条件锁,在func()不加锁的情况下,i一直等于1,说明多个线程没出现不同步的情况,但出现了一下问题:
1. 将条件锁加到main中时,即在进程中触发singal,此时线程中的wait依然阻塞,但在另一个单独的线程触发singal时,没有问题。难道这些锁只为线程准备的?
2. 用pthread_cond_signal(&_cond)时,只能触发一个线程不在等待,系统会调度哪个线程开始工作,其他线程依然wait阻塞,这个应该理解对了,所以用broadcast时才能出发所有线程。
3. 在static void func()这个静态函数中,初始化一个局部变量的锁,到底有没有作用?是不是非要弄成全局的或成员变量等形式,不能用局部变量呢?这个怎么也试不出来。
4. 模拟了半天,多个线程阻塞后,接到singal后,同时开始工作,也没有出现i的异常,不解,难道模拟线程同时工作有问题?
待解中……