静态互斥和非静态互斥的区别
Different Between Static Mutext and Not Static Mutex
我有一个代码在。cpp
namespapce A
{
namespace
{
static CMutex initMutex;
}
void init()
{
//code here
}
void uninit()
{
//code here
}
}
如果我删除互斥锁中的静态和如果有静态有什么不同?静电有什么用呢?
谢谢!
如果互斥锁是静态的,并且它应该在头文件中,并且头文件包含在2个cpp文件(2个平移单元)中,那么第一个文件中的代码所应用的锁将不会被第二个文件看到,这是危险的。这是因为这两个单元具有单独的互斥锁静态。在这种情况下,全局互斥锁更可取。
如果这是c++,那么使用RAII机制来管理互斥锁的锁和解锁。这是c++,类在哪里?把东西封装到一个类中。
RAII的例子(基本的一个,东西可以封装到类中):http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
你把C和c++搞混了。C语言中的关键字static
的目的是将变量的作用域缩小到翻译单元。您可以在翻译单元中全局地定义它,但是对其他翻译单元是不可见的。Bjarne Stroustrup建议在c++中使用匿名namespaces
,而不是像在C中那样使用static
。
从这篇文章它说
c++标准在7.3.1.1节未命名的命名空间第2段中读到:
The use of the static keyword is deprecated when declaring objects
in a namespace scope, the unnamed-namespace provides a superior alternative.
Static仅适用于对象、函数和匿名联合的名称,不适用于类型声明。
static只做两件事:
-
使一个变量在程序的整个生命周期中存在(但这是全局级别的,所以这里的任何内容都在整个程序生命周期中存在!)
-
使变量只在它声明的翻译单元中可见(但这适用于任何匿名命名空间)。
所以,事实上,在这个特定的上下文中, static什么也没做
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 动态分配的数组和静态数组之间的区别
- C 函数中的静态和 C++ 中类中的静态之间的区别?
- 有没有办法声明一个公共静态常量,该常量将使用 constexpr 在源文件中定义(有什么区别)?
- 打印一个带有静态 int 的函数,有一个 std::cout 和多个 std::cout 有什么区别?
- c++ 类中的静态常量变量和常量变量在存储方面是否有区别
- 类中的静态成员变量和C++中的全局变量有什么区别?
- 静态模板类成员函数的这两个调用之间有什么区别?
- C/C++ 中的常量数组和静态常量数组有什么区别
- 返回本地静态的函数和返回静态成员的函数之间有什么区别(对象大小、性能等)?
- 将静态库链接行添加到我的QT项目文件没有区别
- GCC 警告未使用的静态函数,但不警告静态内联:是否有实际区别?
- 类中私有静态方法和私有方法之间的区别
- 声明静态对象和指向静态对象的指针之间的区别
- 指向静态变量的指针和指向某个变量的静态指针之间的区别
- 静态对象在类中的重要性以及它们与一般对象的区别
- 静态 int 和 int 在 C++ 类中的区别
- 静态演员和新的区别
- C 中静态全局和非静态全局标识符之间有什么区别?
- 使用指针和使用静态对象实现单例实现之间的区别