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) 破坏条件变量
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) 清除读写锁状态
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一样,只是加了队列大小限制)
转载于:https://blog.51cto.com/mickelfeng/985399