����
��
��Ϊ��C++�����淶��ָ�����е�һ��С�ڣ�������Ҫ������ C/C++ ���������ԱȽϽ��ܵģ�SMP �����µĶ��߳�ͬ�����⡣֮���Գ�֮Ϊ�������⡷����Ϊ����Ԥ�ڵĶ����Ѿ��߱����ź�����������������������ԭ�Ӳ����;�̬�����ȷ����ı���֪ʶ�����ǽ��Դ�Ϊ������ʼ�����������Ը�һ�������⣺
��
volatile �ؼ���ȷʵ��ԭ�Ӳ�����Ԥ��������������֮���Ĺ�ϵ�������ܶ�����������ô������C/C++ �е� volatile �ؼ����ṩ�����±�֤��
volatile *��* �ṩ���±�֤
��ԭ�Ӳ���Ҫ���������±�֤��
�ɼ���ʹ�� volitale �ؼ��ֲ������Ա�֤������ԭ�����塣volitale �ؼ��ֵ���Ҫ����Ŀ����֧�� C/C++ �������ڴ�ӳ���豸����ͨ�š����Ⲣ����˵ volitale �ؼ��ֶ�ԭ�Ӳ���û���κΰ�����
�ڴ����Ϻ� Acquire��Release ����
|
��
C++ ��֤ȫ�ֱ����ڽ���������ʱ�������Σ����ձ��뵥Ԫ�ڵĶ���˳�س�ʼ����C++
��֤ÿ��ȫ�ֶ����ڽ��̼���ʱ������һ�Σ��ڽ��̽���ʱ�����빹���෴��˳��������һ�Ρ����ǣ�C++
������֤�ڲ�ͬ���뵥Ԫ�ڶ�����ȫ�����ᰴ�ճ���ԱԤ�ڵ�˳����ʼ���� ���ң������û�������ijЩ�ڹ���ʱ�ᴴ�����������̵߳�ȫ�ֶ�������ô������Ҳ�Dz���ȫ�ġ��������Σ���ȫ��������ʱ�������߳���һ���ܲ��õı���ϰ�ߡ���Ϊ��ʱ�û������͵��������п��ܻ��кܶ�ȫ�ֱ���û�л����ڱ���ʼ����C++ ����֤��ͬ���뵥Ԫ�ڵ�ȫ������ʼ��˳�����̺߳ܿ��ܻ�ֱ�ӻ����ӵط��ʵ�δ��ʼ����δ��ȫ��ʼ����ȫ�ֱ����� ���⣬��Ҫȷ���ڲ�ͬ���뵥Ԫ�ڶ�����ȫ��������Ԥ�ڵ�˳����ʼ����һ���鷳�����顣�� VC��SUN CC �ȱ������ṩ�� init segment Ԥ����ѡ����֧�֣���ʱ�����ȼ��ϸߵĶ��ڶ�����ȫ������������ȫ�����ȳ�ʼ�������� init segment ���ṩ��һ�ֳ�ʼ��˳���Ĵ������ַ�ʽ������ GCC �Ⱥܶ��������в�֧�ָ�ѡ� ������Ҫ����ϸ�ؿ���ȫ������������ϵ��������Ҫ�ڲ�֧�� init segment ָ���ı��뻷���п���ȫ������ʼ��˳����Ҫʹ��һЩ�ر��ļ��ɡ����磺������ͬһ���뵥Ԫ�ڶ�����ȫ�������ǰ����䶨��˳����ʼ������Ϊ�����ǿ�����������ij��ȫ���� 'G' ��ͷ�ļ� "G.h" �ж���һ����̬ȫ���� 'S' ��ʹ�� static �ؼ��ֻ������ռ䣩��������Ϊÿ�������� "G.h" �ı��뵥Ԫ��������һ����̬ȫ���� 'S'������ 'G' �� #include "G.h" ֮���ſɼ����������ж�ȫ���� 'G' �ķ��ʶ������� 'S' ������֮����Ҳ����˵����̬ȫ���� 'S' һ������ 'G' ������ǰ���졣����ֻҪ�� 'S' �Ĺ��캯������ʽ�����ɶ� 'G' �ij�ʼ������ȷ����ʼ��˳�����������Թ�ϵ����ȷ�ؽ����� ������һЩ�� 'S' Ӧ�����乹�캯����ά��һ�����ξ�̬������Ϊ���ü�����ȷ�����ڵ�һ�� 'S' ������ʱ���ɳ�ʼ���Ϳ����ˡ� ������ʹ�����ּ���ʱ����Ȼ��Ҫע�����¼������⣺
|
��
C++ ����֤�ֲ���̬�������ڵ�һ��ʹ��ʱ����ʼ��������������ʼ���෴��˳���ڽ��̽���ʱ���١����ǣ�C++
����֤�ֲ���̬������ʼ���Ķ��̰߳�ȫ�ԡ�ʵ���ϣ���������������ʹ���������µļ���ʵ�ֱ��ؾ�̬������ʼ���ģ� ��
���������ӿ�֪������ func ��Ҫ�����ڶ��̲߳����Ļ����У������ܻ��������¼��־�̬������
���ڷ� POD ���ͣ����������Ӹ��ӣ�
���Կ�������ʱ����ǰ���ᵽ�ĸ��־�̬�����⣬�����ܳ��� s_iMyObj �Ĺ��캯�����������������ε��õ����⡣ ���������ԶԳ�������Ҫ�����ǾͿ���ʹ��һ�ּķ�ʽ����֤�ֲ���̬������ʼ��ʱ�Ķ��̰߳�ȫ�ԣ�
���� fmxLock ���Կ�����һ������������ CFastSessionLock ����һ������ RAII ������ Sentry �ࣨ�ڹ���ʱ����������ʱ�������� ���ߣ�������ʼ�����ط�Ҫ�ӳٵ��û���һ�ε��ô˺���ʱ�Ž��С����ǾͿ���ֱ�ӽ��ֲ���̬����������ȫ�ֱ�������̬���Ǿ�̬���ɣ���������Ҫ���Ʊ�������������ʹ��һ��ȫ����λ�����ɽ�������ʱ�ij�ʼ��������
ǰ���Ѿ����������ֲ���̬������ͬ��C++ ��֤ȫ�ֱ����ڽ���������ʱ������ͬһ�����뵥Ԫ�ڶ�����ȫ�����ᰴ���䶨��˳�������εس�ʼ���� ���⣬ʹ�����泣����ʼ��һ�����ؾ�̬ POD �������̰߳�ȫ�ġ�ʵ���ϣ�������ʼ���������ڳ�����һ��ִ�е��ñ�������������ʱ�Ž��еģ������ڳ�������ʱ��ֱ�Ӵ�ӳ���ļ��ڵ����ݶ��м����ˡ�������һ���� POD �����������Ƿ�ʹ�ñ���ʱ��֪�ij����������г�ʼ��������������ҪΪ�����ɵ��ù��졢���������Ĵ����ͳ�ʼ����־���������磺
���� POD ���ͣ�һ�ָ��õĽ��������ǣ��������ò���ϵͳ���ؽ���ʱ�������ݶ���ȫ����ʼ�������ԣ�C++ ������ȷ�涨�ˣ����о�̬��Ա�����������ݶΣ��ڽ��̼���ʱ������ "zero-initialized"���������ݶ����㶯�����ڲ���ϵͳ���ؽ���ӳ��ʱ�����ɵģ���ʱ�����̶߳���û�б��������κ��û����붼û�п�ʼִ�У����Բ����ڶ��̰߳�ȫ�����⡣���磺
ʵ���ϣ�ǰ���ᵽ�ģ��������Զ����ɵ� "bCompilerInitFlag" ���DZ������������������������ɳ�ʼ���ġ� ���ý������ݶ���ӳ������ʱ���������ԣ�����ʹ��һ�������������ǾͿ����ڼ�������ʧ�����Ե�ǰ���±�֤���Ȿ�ؾ�̬ POD ������ʼ��ʱ���̰߳�ȫ����
�������ӱ�֤�� s_nMyVar ��ʼ��ʱ�Ķ��̰߳�ȫ�ԣ�ͬʱֻ�� s_nMyVar ��δ������ʼ��ʱ�����˲������òŻ��ϻ������������ȵر�֤�˲���Ч�ʡ� �� POD ���͵����������Ը��ӡ� ��Ϊ���������ǻ����ɵ��ù��캯��������������ѹ�������˳��ڣ�atexit���Ĵ��룬������Ҫ��ά�ֲ����Ե�ͬʱ��֤����ʼ��ʱ���̰߳�ȫ�ԣ������� POD �����ͱ�����������������
�ź����ǣ��������������ͬʱ�������� 4 ��������Ϊ�ˣ����ǿ���ʹ��һ�������������и��������磺
���������Լ���Ϊ CTmpHandle ��һ������ "std::auto_ptr" ������ָ��ģ���࣬����һ��ָ���ͳ�Ա 'ptr'��"DontInit" ռλ����ʾ����ʱ�����κζ��������������캯���Ķ��β������ý����൱�ڵ����˿պ��������������κβ���Ӱ�졣�� CTmpHandle ������������������������ "delete ptr; ptr = NULL;" ��Ϊ��ͻ�����⣬����û�к����� delete ʱ���������׳��쳣�������������ٺ��� 'ptr' ��Ϊ 'NULL' ��֤���ڳ����˳������еض��ε��������������������κθ����á��������ij�ʼ����������һ������������������ֻ�� s_thMyObj ��δ������ʼ��ʱ�����˲������òŻ��ϻ����������������ȵر�֤�˲���Ч�ʡ� ˳����һ�£������е� 's_thMyObj = new CMyClass;' ������ʵ����һ��ָ�븳ֵ������'s_thMyObj.ptr = new CMyClass'���������� '!s_thMyObj' ���� 'NULL != s_thMyObj.ptr' ��ȫ��Ч����������Ҳ�������ϵ������������ġ�����ʼ�����������ڼ�����ʼ���Ƿ����ɵIJ�����˵����һ��ԭ�Ӳ�������Ӧ��ע����˴��ġ�ԭ�Ӳ������뱾�ĵ�һ����������Ӳ�������IJ�����һ����� |
��
Copyright (C) 2004 - 2019, Bai Yang (baiy.cn). All Rights
Reserved.
��
��