zoukankan      html  css  js  c++  java
  • 进程中的线程共享的资源有哪些?

    进程中的线程共享的资源有哪些?在计算机操作系统原理里面讲到了进程中的线程共享进程的资源。但是对于进程具体共享哪些资源,书上讲得含糊不清,网上的资料也是比较笼统,没有确切的内容来说明到底哪些资源是共享的,哪些资源是独享的。

    线程之间共享堆区资源:

    线程之间共享栈区(堆栈)资源:

    理由如下:

    #include <iostream>
    #include <Windows.h>
    using namespace std;
    
    char *g_pStr = NULL;
    int *g_pData = 0;
    DWORD WINAPI ThreadFunc1( LPVOID lpThreadParameter );
    DWORD WINAPI ThreadFunc2( LPVOID lpThreadParameter );
    int main()
    {
    	char *p = new char [1024];
    	memset(p,0,1024);
    	strcpy(p,"Hello123456");
    	g_pStr = p;
    	int n = 1999;
    	g_pData = &n;
    	HANDLE hd1 = CreateThread(NULL,0,ThreadFunc1,NULL,CREATE_ALWAYS,NULL);
    	HANDLE hd2 = CreateThread(NULL,0,ThreadFunc2,NULL,CREATE_ALWAYS,NULL);
    	WaitForSingleObject(hd1,INFINITE);
    	WaitForSingleObject(hd2,INFINITE);
    	Sleep(500);
    	return 0;
    }
    DWORD WINAPI ThreadFunc1( LPVOID lpThreadParameter )
    {
    	char *p = new char [1024];
    	memset(p,0,1024);
    	strcpy(p,"Hello123456");
    	g_pStr = p;
    	int nData = 122222;
    	g_pData = &nData;
    	Sleep(10000);
    
    	return 0;
    }
    
    DWORD WINAPI ThreadFunc2( LPVOID lpThreadParameter )
    {
    	char *pStr = g_pStr;
    	if (g_pStr)
    	{
    		cout<<pStr<<endl;
    	}
    	int *pD = g_pData;
    	cout<<*pD<<endl;
    
    	return 0;
    }
    

      

    在我们的线程中,线程1中在栈区创建某个对象,在线程2中,通过线程1中的地址,直接来取出线程1中栈区中的某个对象,我们是能够取出来的。在线程2中,我们也可以取出线程1中的某个值。这也就表明了,进程中的线程共享进程中的栈区,也共享进程中的堆区。

  • 相关阅读:
    大数据基础---安装ClouderaManager,CDH和Impala,Hue,oozie等服务
    大数据基础---ClouderaManager和CDH是什么?
    大数据基础---通过Flume、Sqoop分析日志
    VS2015设置快捷键
    QGIS添加在线地图
    Python + SQLite + ST_Geometry
    Python 安装 selenium 与 chromedriver.exe
    Python IDLE 编译器 显示代码行号
    Python IDLE 编辑器开启代码自动提示
    Python IDLE编辑器打开后缀名为.py的文件
  • 原文地址:https://www.cnblogs.com/BreakMind/p/2433242.html
Copyright © 2011-2022 走看看