Ó÷¨£º
1¡¢¾²Ì¬³ÉÔ±±äÁ¿£¬ÔÚÀàÖÐÒÔstatic ±êʶ£¬¸ñʽ£º static ;
2¡¢¾²Ì¬³ÉÔ±±äÁ¿ÐèÒªÔÚÀàÍâÃæ³õʼ»¯²ÅÄܹ»Ê¹Óᣳõʼ»¯²»ÒªÔÚ¹¹Ô캯Êý³õʼ»¯£¬»áÆÆ»µÊý¾Ý£¨¿´Àý×Ó£©¡£ÀàÍâ³õʼ»¯»áÔÚÈ«¾ÖÊý¾ÝÇøÉêÇë¿Õ¼ä£»ÀàÍâÖ»×÷ÁËÉùÃ÷ûÓнøÐи³ÖµµÄ»°£¬¾Í»áÔÚbssÇø±ê¼ÇÏÂÀ´£¬´ýÔËÐÐʱϵͳ»á³õʼ»¯Îª0¡££¨ÖÁÓÚ£¬Êý¾ÝÇø£¬bssÇøµÄ˵Ã÷£¬Çë²é¿´Ïà¹Ø×ÊÁÏ¡££©
3¡¢ÎÞÂÛ´´½¨¼¸¸öÀà¶ÔÏ󣬾²Ì¬±äÁ¿ÔÚÀàÖÐÖ»±£ÁôÒ»·Ý£¬±»¶à¸ö¶ÔÏó¹²Ïí£¬ËùÒÔ¶ÁÈ¡ºÍдÈëʱ×îºÃÒ²Óиö¾²Ì¬µÄ»¥³âËø°ÑËüËø×¡£¬ÔÙ½øÐжÁд¡£
²é¿´Àý×ÓÔÂ룺cat main.cpp
Àý£º
#include
#include
#include
class CIstatic{
public:
//****************down*****************
CIstatic()
{
m_fd[0] = -1;
m_fd[1] = -1; //ΣÏյľ²Ì¬³ÉÔ±±äÁ¿ÔÚ¹¹Ô캯Êý³õʼ»¯¡£
m_fd[2] = -1;
}
//*****************up*******************
void setVal()
{
m_fd_mutex.lock();
m_fd[0] = 1;
m_fd[1] = 2;
m_fd_mutex.unlock();
}
void printVal()
{
m_fd_mutex.lock();
printf("m_fd[0]:%d,m_fd[1]:%d,m_fd[2]:%d\n",m_fd[0],m_fd[1],m_fd[2]);
m_fd_mutex.unlock();
}
private:
static int m_fd[3];
static std::mutex m_fd_mutex;
};
int CIstatic::m_fd[3]; //ÀàÍâÉùÃ÷£¬Î´³õʼ»¯¸³Öµ¡£
std::mutex CIstatic::m_fd_mutex; //ÀàÍâÉùÃ÷£¬Î´³õʼ»¯¸³Öµ¡£
int main(int argc, const char *argv[])
{
CIstatic cStaticA;
cStaticA.setVal();
cStaticA.printVal();
sleep(1);
CIstatic cStaticB; //ÖØÐÂн¨ÄÚ¶ÔÏó¡£
cStaticB.printVal();
return 0;
}
±àÒ룺g++ -std=c++0x -o test.i386.elf main.cpp
ÔËÐнá¹û£º
1¡¢Î´ÆÁ±Î¹¹Ô캯Êýǰ£º
m_fd[0]:1,m_fd[1]:2,m_fd[2]:-1
m_fd[0]:-1,m_fd[1]:-1,m_fd[2]:-1
2¡¢ÆÁ±Î¹¹Ô캯Êýºó£º
m_fd[0]:1,m_fd[1]:2,m_fd[2]:0
m_fd[0]:1,m_fd[1]:2,m_fd[2]:0