问题标签 [scoped-lock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2538 浏览

c++ - 提升 scoped_lock。这个会锁吗?

解决了

我将 bfs::directory_iterator 队列更改为 std::string 队列,出人意料地解决了这个问题。


嗨,我有一种直觉,我做错了事。

我已经实现(或试图)线程池模式。

N 个线程从队列中读取,但我遇到了一些麻烦。这是我得到的:

scoped_lock 是否仍然可以在 if 的主体内工作?我开始相信它不会(在运行了许多测试之后)。如果没有,是否有任何范围的方法来做到这一点(即不是显式锁定解锁方式)

提前致谢。

更新

将元素添加到队列的代码如下所示

我放置了一个 cout 来控制弹出的文件名,如果我推送 2 个文件(file1)和(file2),并使用 2 个线程,我会得到两个“file2”。

0 投票
1 回答
419 浏览

c++ - 错误使用 scoped_lock 导致的内存泄漏?

我有内存泄漏,我猜它是由 scoped_lock (Boost) 的错误使用引起的。但是,我无法找到确切的问题,而且我确实相信编写代码的方式也不完全正确。

代码在此类中: http ://taf.codeplex.com/SourceControl/changeset/view/31767#511225

主要的重要方法是ThreadedLoop()。基本上,此方法在线程中启动,并定期检查要为雅虎下载的市场数据。对于每只股票(或其他),将创建一个新线程(用于 ExecuteNextRequest() 方法),将指向包含股票名称的字符串的指针作为参数传递。这是我做的唯一内存分配,但它是在线程执行结束时释放的。

我也会对如何增强此代码感兴趣(当然我可以使用线程池,但这还不是重点)。非常感谢!

0 投票
1 回答
801 浏览

c++ - boost::recursive_mutex::scoped_locks 析构函数会引用未锁定的互斥锁吗?

调用unlock()a后boost::recursive_mutex::scoped_lock,锁对象会在其析构函数中以某种方式引用互斥锁吗?

在调用解锁后,锁仍然保留对互斥锁的引用(即mutex()返回相同的指针)。release()如果互斥体在锁超出范围之前被销毁,还必须在锁上调用吗?

0 投票
1 回答
2669 浏览

c++ - boost::interprocess::scoped_lock 应用程序在锁内崩溃

我正在使用 boost::interprocess::scoped_lock,如果应用程序由于某种原因在范围内崩溃,互斥锁不会被释放。下次执行应用程序时(无需重新启动计算机),互斥锁将被锁定。

这是如何工作的?下面我给出一个简单的代码示例。


我最终做了一个像下面这样的超时。谁能想出一个不限制锁定时间的解决方案?

0 投票
3 回答
585 浏览

c++ - 寻找返回 boost::scoped_lock 的函数(或宏)

我正在寻找代码缩短的想法。我boost::scoped_lock用来锁定 aboost::mutex但我想缩短我正在编写的代码量。

目前我mutex在我的班级和成员字段中定义了一个名为_sync. 当我想锁定时,我必须写:

棘手的部分是这是一个作用域锁,所以我假设如果我编写一个静态函数来返回作用域锁,那么它会在它离开静态函数的函数作用域后立即解锁:

这种方法可以很容易地输入:

我的假设正确吗?scoped_lock当我的静态函数返回时会立即解锁吗?

0 投票
1 回答
401 浏览

multithreading - Boost::thread、过剩和数据共享

我认为我的程序有问题。我必须创建一个与外部跟踪系统持续通信并从中获取点坐标的对象。我将这个类包装在 boost::thread 中,在第一次调用我的 Glut 应用程序之前,我创建了线程对象并将其分离

该类的显着方法的代码如下

我的 glutTimerFunc 调用一个更新函数,每个帧都使用 getAllPoints 方法选择点,而跟踪器线程不断更新它们(实际上访问数据的频率不同,线程调用比 glut 更新函数更快来电。

现在当程序退出时,我首先删除用 new 分配的 Tracker 对象,然后中断包含它的线程,但有时我会得到奇怪的行为,我认为它们是内存泄漏

获取具有不同访问频率的数据和使用 scoped_lock 的方式是否正确,或者我应该在 getAllPoints 方法中设置一些保护措施?

0 投票
3 回答
2262 浏览

c++ - “嵌套”作用域锁

我缩短的简化类如下所示:

我想同步访问m_myVar. 调用A::methodB()时,线程两次进入同一个互斥锁的锁,明显阻塞在第一行。A::methodA()

有什么办法可以在再次通过时scoped_lock不阻塞同一个线程

当然,我可以调用m_mutex.unlock(). 但这也会释放等待锁的其他线程——这绝对不是我想要的。

任何的想法?

最好的问候托比亚斯

0 投票
1 回答
569 浏览

c++ - boost::signals2::mutex 和 boost::thread::mutex 有什么区别?

我正在使用scoped_lockmutex实现在另一个 SO question 中发布的 BlockingQueue版本,但是在 boost 中它们都有多个不同的预编译头文件。

scoped_lock可通过“boost/interprocessor/sync/scoped_lock.hpp”和“boost/thread/mutex.hpp”获得

mutex可通过“boost/thread/mutex.hpp”、“boost/signals2/mutex.hpp”和“boost/thread/win32/mutex.hpp”获得

我可以猜测“win32/mutex.hpp”以某种方式针对 Windows 进行了优化,但是其他的呢?他们之间有什么区别?

0 投票
1 回答
821 浏览

c++ - 在范围锁定之前检查可选的互斥锁

我有一个构造函数,可以选择允许用户将 ponter 传递给 Boost 互斥体。如果未提供互斥锁,则成员指针pMyMutex设置为NULL。如果他们愿意,这使用户可以选择应用一些线程安全。但是,出于明显的原因,我不能将 ascoped_lock与这种检查一起使用:)

任何人都可以为这种要求提出一个简洁而简单的解决方案吗?

0 投票
1 回答
614 浏览

c++ - boost-threads:如何将 scoped_lock 传递给被调用者?

我是 boost 线程库的新手。我有一种情况,我获得了scoped_lock一个函数,需要在被调用者中等待它。

代码位于以下行:

基本上,在 function 中d(),我需要访问我获得的作用域锁,a()以便我可以等待它。我怎么做 ?(其他一些线程会通知)。

或者我可以直接等待互斥锁而不是锁吗?

任何帮助表示赞赏。谢谢 !