C++11多了个delete关键字,准确的说形容类中的成员函数时,多了个delete关键字,有用吗,不敢妄评。不过还是常识性的觉得设置为private就好了,大家如果有什么好的理解,欢迎拍砖!
std::mutex 和 std::lock_guard通过RAII特性来方便了程序的书写,提供了共享数据的保护,但是坑仍然存在,你非要传个类成员的指针出去,不加保护,这也没办法,哈哈,指针大法好!之前一直纠结于mutex的实现,在多线程的环境下,到底mutex能不能提供数据真正的保护,即同一时刻只有一个线程能获得数据的访问权,现在看来,多虑了,答案是可以,放心好了,mutex的实现的话听说pthread_mutex加了个系统调用fmutex好像,在用户态实现,但是想想,因为有进程阻塞,可能会调用yield函数来释放运行权限。具体的没看,英语学的不好,文档内容又太多。
同样的,在使用STL时,一个需要注意的点就是STL不是线程安全的,怎么办呢,自己搞
template<typename T>
class vector_thread_safe
{
public:
vector<T> & push_back(T &t)
{
std::lock_guard<std::mutex>g(m);
vec.push_back(t);
return vec;
}
size_t size()
{
std::lock_guard<std::mutex>g(m);
return vec.size();
}
private:
vector<T>vec;
std::mutex m;
};
自己封装为线程安全的,如果上面代码有问题,直接批评,别客气!
stack的pop如果因为拷贝构造函数申请内存空间失败该怎么办,还是原子性的概念,这时元素不应该pop成功,stack恢复原来的状态,自己写着玩的程序不可能出现这种情况,大数据的考验。
烦,什么都不相干,一会去打打球,放松下。
为了实现理想,需要放弃的事情可多了,看似诙谐的一句话,背后你懂,我懂!