1. 前言
写了这么多年的C++代码,在这里总结一下C++多线程数据共享问题。
2. 多线程不安全
其实C++没有线程安全的用于线程间共享的方式,在不使用互斥锁等情况下,都是线程不安全的。因为C++太相信程序员了,他以为我们会很好的处理好线程间通信的问题。。。
3. vector
在线程通讯中,我偏爱vector,当然vector是线程不安全的,因此每次操作vector我都会先死循环不断尝试锁定互斥锁,然后操作vector,最后释放互斥锁。
vector可以用来传递任何数据,无论是char*,还是FFmpeg的视频帧,或者是其他任意类型数据。
但需要注意的是:
1. vector是线程不安全的,对它的任何操作,都要使用互斥锁mutex先锁定,再释放,无论你是取size,还是读数据还是写数据。
2. 不要在vector循环中删除vector内容。
3. 要注意避免vector引起的内存泄漏,如果向vector推数据的速度大于取数据的速度,妥妥的,内存泄漏。其实在这种情况下,就不要用vector了。不,正确的说,是不要使用多线程了。