ZThread-2.3.2( http://zthread.sourceforge.net/
vc2005编译:
1.建立静态链接库项目
2.把src目录下的源文件导入工程
3.附加包含目录添加include,使用多字节字符集
4.F7编译
5.一切ok
 
问题:
1.既然是跨平台,代码中一定会有很多宏定义以判断平台,默认定义的宏是什么? 或者vc自己定义了什么宏致使不明显的定义宏也编译ok。
(#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__BCPLUSPLUS__) || defined(__MINGW32__)
#  define ZT_WIN32
)
2.库会生成很多调试信息,通过注释掉还是定义宏来屏蔽这些噪音?( #define NDEBUG
 
vc6编译:
1.建立静态链接库项目
2.把src目录下的源文件导入工程
3.附加包含目录添加include
4.同一个函数内以下声明在vc6是会出错的,会报错重定义i。只要改一下变量名就可以了
 
void fun(void){
  for( int i = 0; i < 10; i++)
  {
  }
  for( int i = 0; i < 10; i++)
  {
  }
}
 
5. 编译
6.十分顺利
 
问题:
1.测试发现有问题
????????????
====================================================
深研究,看看价值高不高……
 
 
1.同步
互斥:win32平台包括互斥量、临界区。posix仅互斥量。
信号量:
事件:win32平台
可等待定时器:win32平台
条件变量:posix
  Cond_init(3T) 初始化条件变量 
  Cond_wait(3T) 基于条件变量阻塞 
  Cond_signal(3T) 解除指定线程的阻塞 
  Cond_timedwait(3T) 阻塞直到指定事件发生 
  Cond_broadcast(3T) 解除所有线程的阻塞 
  Cond_destroy(3T) 破坏条件变量 
读写锁:posix
   单写多读,读时不可写,写时不可读。
   rwlock_init(3T) 初始化一个读写锁 
   rw_rdlock(3T) 获得一个读锁 
   rw_tryrdlock(3T) 试图获得一个读锁 
   rw_wrlock(3T) 获得一个写锁 
   rw_trywrlock(3T) 试图获得一个写锁 
   rw_unlock(3T) 使一个读写锁退出阻塞 
   rwlock_destroy(3T) 清除读写锁状态

 
Mutex类,很容易
模板类Guard其实就是scopeLock(在代码段内构造与释放,构造对象时获取锁,释放对象时释放锁)
 
接口:Lockable(acquire、tryAcquire、release)
实现:
Mutex(没有新增接口)
FastMutex
 
Semaphore(接口变名wait、trywait、post)
prioritySemaphore(线程优先级高的先获得控制权,没多大意义)
 
条件变量:
Condition
 
 
 
 
2. 睡眠
Thread::sleep()
 
3: Thread 类
接口Executor(用来执行一个任务)
实现类:
SynchronousExecutor(在调用线程中执行任务,没有创建新线程)
ThreadExecutor类(创建新线程执行任务)
PoolExecutor类(线程池)
ConcurrentExecutor(用仅有一个线程的线程池)
 
 
4.线程本地存储Thread local storage
ThreadLocal模板类
ThreadLocal<int> localValue;
 
5.线程安全容器类
队列接口Queue
实现类:
LockedQueue
BlockingQueue(使用条件变量)
MonitoredQueue(与BlockingQueue基本一样,只是empty会阻塞)
BoundedQueue(与 MonitoredQueue一样,只是加了队列大小限制)