多少BUGS,尽源于拷贝粘贴!
2016-07-30 00:00
495 查看
摘要: 通常多线程编程最大的问题是数据共享的问题,仅共享加锁列表的方法,可以很好的解决。
多线之间的数据共享,除此之外,还有信号量共享的问题。下面的代码是有问题的。
因为psem是个共享内存信号量,名字一样的话,两个类里的psem是一样的,这是个很低级的BUG, 常常由于拷贝粘贴而没有注意同名导致。
多线之间的数据共享,除此之外,还有信号量共享的问题。下面的代码是有问题的。
class cthread1{ void start(); void thread_proc(); private: sem_t* psem; }; static void *do_thread1(void* data){ cthread1* ptread = (cthread1*)data; pthread->thread_proc(); } void cthread1:start(){ psem = sem_open("http", O_CREAT, 0644, 1); pthread_t thread_t; pthread_create(&thread_t, NULL, do_thread1, this); pthread_detach(thread_t); } void cthread1:thread_proc(){ //use psem,do somthing. } class cthread2{ void start(); void thread_proc(); private: sem_t* psem; }; static void *do_thread2(void* data){ cthread2* ptread = (cthread2*)data; pthread->thread_proc(); } void cthread2:start(){ psem = sem_open("http", O_CREAT, 0644, 1); pthread_t thread_t; pthread_create(&thread_t, NULL, do_thread2, this); pthread_detach(thread_t); } void cthread2:thread_proc(){ //use psem,do somthing. }
因为psem是个共享内存信号量,名字一样的话,两个类里的psem是一样的,这是个很低级的BUG, 常常由于拷贝粘贴而没有注意同名导致。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Python3写爬虫(四)多线程实现数据爬取
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- C#实现多线程的同步方法实例分析
- Lua中调用C++函数示例
- 浅谈chuck-lua中的多线程
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#信号量用法简单示例
- C#多线程编程中的锁系统(三)
- 解析C#多线程编程中异步多线程的实现及线程池的使用
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C++联合体转换成C#结构的实现方法
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析