问问诸位大神多线程使用类成员变量的问题

奇默 当当网 2013-01-25 11:25:32
多线程使用类的成员变量 如何给这个成员变量加锁啊
因为这个成员变量频繁读写
...全文
140 17 点赞 打赏 收藏 举报
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nice_cxf 2013-01-25
类的成员变量加什么锁啊,除非是单例类的或静态的成员变量
  • 打赏
  • 举报
回复
氰客 2013-01-25

static BOOL m_isLock;
static void Lock()
{
   while(m_isLock)
   {
      Sleep(1);
   }
   m_isLock = TRUE;
}
static void UnLock()
{
   m_isLock = FALSE;
}
- -感觉一副很不保险的样子。
  • 打赏
  • 举报
回复
奇默 2013-01-25
别人写的多线程。前提不能改他人接口 现在有一个全局变量是我写的,需贯穿他人写的几种方法。 这个就会出现线程安全的问题。 我想有没有一种方法只对我自己定义的变量在开始写的时候进行加锁, 用完之后解锁
  • 打赏
  • 举报
回复
阿麦 2013-01-25
互斥锁。哪个系统都会(也是必须)有的。找找文档
  • 打赏
  • 举报
回复
奇默 2013-01-25
引用 3 楼 xiaohuh421 的回复:
搜索linux下线程间同步互斥 会有很多方法解决你这个问题.
线程互斥的方法很多。但是现在我只想对成员变量加以保护,多线程是别人写的接口,我没法改他人的接口啊?
  • 打赏
  • 举报
回复
xiaohuh421 2013-01-25
搜索linux下线程间同步互斥 会有很多方法解决你这个问题.
  • 打赏
  • 举报
回复
奇默 2013-01-25
引用 1 楼 KuaiPengFei_ 的回复:
...怎么加锁? 百度啊 一大堆的例子 既然你都知道方法了 还不简单啊 lock(); .......操作成员变量 unclock(); 不就行了?
这个好像是windows下的函数啊? linux总是找不到这两个函数
  • 打赏
  • 举报
回复
Joseph_ 2013-01-25
...怎么加锁? 百度啊 一大堆的例子 既然你都知道方法了 还不简单啊 lock(); .......操作成员变量 unclock(); 不就行了?
  • 打赏
  • 举报
回复
奇默 2013-01-25
引用 14 楼 KuaiPengFei_ 的回复:
引用 12 楼 fyy406941814 的回复:引用 10 楼 KuaiPengFei_ 的回复:引用 9 楼 KuaiPengFei_ 的回复:引用 1 楼 KuaiPengFei_ 的回复:...怎么加锁? 百度啊 一大堆的例子 既然你都知道方法了 还不简单啊 lock(); .......操作成员变量 unclock(); 不就行了? inc……
例子举得有问题,源代码是每次写之前都会clear一次,这个是自己测试多线程锁写的。 只有一次clear
  • 打赏
  • 举报
回复
bravery36 2013-01-25
代码本身就有问题,一千把锁也防不住内贼。
  • 打赏
  • 举报
回复
Joseph_ 2013-01-25
你调用clear方法的时候如果是为了初始化或者什么的 你单独拿出来放在一个函数里面 多次被调用push_back这个方法 单独写出来 不然每次写你都删除 什么锁都是浮云!!!
  • 打赏
  • 举报
回复
Joseph_ 2013-01-25
引用 12 楼 fyy406941814 的回复:
引用 10 楼 KuaiPengFei_ 的回复:引用 9 楼 KuaiPengFei_ 的回复:引用 1 楼 KuaiPengFei_ 的回复:...怎么加锁? 百度啊 一大堆的例子 既然你都知道方法了 还不简单啊 lock(); .......操作成员变量 unclock(); 不就行了? include <pthread.h> pth……
什么东东!! 你自己调用的clear 函数啊 就算是锁了 一样的也会删掉 线程锁 不是为了保证数据部被删除 是为了避免一块内存同时被几个线程操作 这样就会乱套了。。 所有使用线程锁 来是的数据安全 一个个有顺的执行 你现在是自己调用clear 必然删除! 概念都没清楚
  • 打赏
  • 举报
回复
Joseph_ 2013-01-25
引用 11 楼 xiaohuh421 的回复:
引用 4 楼 fyy406941814 的回复:引用 3 楼 xiaohuh421 的回复:搜索linux下线程间同步互斥 会有很多方法解决你这个问题. 线程互斥的方法很多。但是现在我只想对成员变量加以保护,多线程是别人写的接口,我没法改他人的接口啊? 你的成员变量不会是 public,直接访问,而没有提供访问方法吧.....那没办法了, 只有叫他配合改那边代……
什么东东!! 你自己调用的clear 函数啊 就算是锁了 一样的也会删掉 线程锁 不是为了保证数据部被删除 是为了避免一块内存同时被几个线程操作 这样就会乱套了。。 所有使用线程锁 来是的数据安全 一个个有顺的执行 你现在是自己调用clear 必然删除! 概念都没清楚
  • 打赏
  • 举报
回复
奇默 2013-01-25
引用 10 楼 KuaiPengFei_ 的回复:
引用 9 楼 KuaiPengFei_ 的回复:引用 1 楼 KuaiPengFei_ 的回复:...怎么加锁? 百度啊 一大堆的例子 既然你都知道方法了 还不简单啊 lock(); .......操作成员变量 unclock(); 不就行了? include <pthread.h> pthread_mutex_t lock; pth……
举个简单的例子吧: class A { public: vector<int> vec; void funA() { vec.clear() vec.push_back() } void funB() { vec.clear() vec.push_back() } } 多线程会出现:A调用funA的时候 会写 B调用B的时候,有可能把A清空
  • 打赏
  • 举报
回复
xiaohuh421 2013-01-25
引用 4 楼 fyy406941814 的回复:
引用 3 楼 xiaohuh421 的回复:搜索linux下线程间同步互斥 会有很多方法解决你这个问题. 线程互斥的方法很多。但是现在我只想对成员变量加以保护,多线程是别人写的接口,我没法改他人的接口啊?
你的成员变量不会是 public,直接访问,而没有提供访问方法吧.....那没办法了, 只有叫他配合改那边代码. 这就是成员变量一定要使用方法来访问,而不是直接读写的地方. 如果你的成员变量是通过方法来访问的, 你就可以方便的修改这个问题了.
  • 打赏
  • 举报
回复
Joseph_ 2013-01-25
引用 9 楼 KuaiPengFei_ 的回复:
引用 1 楼 KuaiPengFei_ 的回复:...怎么加锁? 百度啊 一大堆的例子 既然你都知道方法了 还不简单啊 lock(); .......操作成员变量 unclock(); 不就行了? include <pthread.h> pthread_mutex_t lock; pthread_mutex_init(&loc……
linux 编译的时候命令要加lib (gcc text.c -lpthread)
  • 打赏
  • 举报
回复
Joseph_ 2013-01-25
引用 1 楼 KuaiPengFei_ 的回复:
...怎么加锁? 百度啊 一大堆的例子 既然你都知道方法了 还不简单啊 lock(); .......操作成员变量 unclock(); 不就行了?
include <pthread.h> pthread_mutex_t lock; pthread_mutex_init(&lock,NULL); pthread_mutex_lock(&lock); ....... pthread_mutex_lock(&lock);
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2013-01-25 11:25
社区公告
暂无公告