我在SO上读到这个答案:
因为递归互斥锁具有所有权感,所以抓取互斥锁的线程必须与释放互斥锁的线程相同.在非递归互斥锁的情况下,没有所有权感,任何线程通常都可以释放互斥锁,无论哪个线程最初使用互斥锁.
我对上一个陈述感到困惑.一个线程可以锁定一个互斥锁,另一个不同的线程可以解锁该互斥锁吗?我以为同一个线程应该是唯一能够解锁互斥锁的线程?或者是否有任何特定的互斥量允许这个?我希望有人能澄清一下.
请考虑以下代码:
class A
{
public:
A& operator=( const A& );
const A& operator+( const A& );
const A& operator+( int m );
};
int main()
{
A a;
a = ( a + a ) + 5; // error: binary '+' : no operator found which takes a left-hand operand of type 'const A'
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么上面的错误返回?
" ( a + a )"调用" const A& operator+( const A& )"并返回一个常量引用,const A& operator+( int m )如果我没有弄错,则将其传递给" ".
如何修复上述错误(不创建全局二元运算符+或接受int的构造函数),以main() …
我只是不确定......
如果您有一个可以执行以下任一复杂性的代码:
首选版本是可以在线性时间内执行的版本.是否会有一段时间O(n)的序列太多而O(n²)会更受欢迎?换句话说,对于任何常数C,语句C x O(n)<O(n²)是否总是为真?
为什么或者为什么不?影响条件的因素有哪些,选择O(n²)复杂度会更好?
我无法使用set同步两个线程:
private Set<String> set;
...
set = Collections.synchronizedSet(new HashSet<String>());
Run Code Online (Sandbox Code Playgroud)
并将其传递给两个线程.一个访问:
synchronized (set) {
// [1]
if (set.contains(str)) {
...
} else {
// [3]
}
}
Run Code Online (Sandbox Code Playgroud)
和另一个更新:
synchronized (set) {
set.add(str); // [2]
...
}
Run Code Online (Sandbox Code Playgroud)
会发生的是[1],[2],[3]按顺序发生.在[1]期间,该集合还没有我正在寻找的项目是正确的.但后来[2]通过添加项目来更新它.在[3]期间,我现在看到了这个项目.我该如何解决?我也有一个ConcurrentHashMap由相同的线程共享,但它工作得很好.什么是与ConcurrentHashMAp相当的集合?
更新:代码太长.无论如何,我更新的问题是 - 该集合与ConcurrentHAshMap的等价是什么?
编译一些旧的VC++ 6.0源代码时遇到此错误.
error C2632: 'long' followed by 'long' is illegal
Run Code Online (Sandbox Code Playgroud)
有一部分代码声明了一个导致错误的long long int变量.有谁知道我怎么能修复这个在VC++ 6.0中编译它的错误?我已经四处搜索,我已经读过这个版本尚不支持这种数据类型.但是,这是一个旧代码,我确信这是在VC++ 6.0中编译的.
请考虑以下代码:
class Base
{
void f() { }
};
class Derived: public Base
{
public:
};
Run Code Online (Sandbox Code Playgroud)
您可以在派生类中更改什么,以便您可以执行以下操作:
Derived d;
d.f();
Run Code Online (Sandbox Code Playgroud)
如果成员在基类中声明为public,则在派生类public section中为Base :: f添加using声明将解决问题.但是如果它在基类中被声明为私有,那么这似乎不起作用.
它应该只包含一个循环
while (true) { ... }
我发现它不那么高效,因为它消耗了很多CPU.我希望我的线程能够继续等待,但是最好的方法是让它等待而不消耗这么多CPU?
例如:
getBooks(author, title)
Run Code Online (Sandbox Code Playgroud)
要消除这种情况,请执行以下功能:
getBooks(author)
getBooks(title)
getBooks(author, title)
getBooks()
Run Code Online (Sandbox Code Playgroud)
在新函数中,可能存在冗余代码,或者如果我们将这些冗余代码分组到函数中,我们仍将进入具有空参数的函数.有什么更好的方法来处理这个 - 没有冗余代码和没有空参数?