国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

進(jìn)程同步與進(jìn)程通信(#include <windows.h>)

這篇具有很好參考價(jià)值的文章主要介紹了進(jìn)程同步與進(jìn)程通信(#include <windows.h>)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

實(shí)驗(yàn)二? 進(jìn)程同步與進(jìn)程通信

一、實(shí)驗(yàn)?zāi)康?/p>

二、實(shí)驗(yàn)內(nèi)容

任務(wù)一、進(jìn)程同步與互斥

任務(wù)二、進(jìn)程通信


實(shí)驗(yàn)二? 進(jìn)程同步與進(jìn)程通信

備注:大二(下)操作系統(tǒng)實(shí)驗(yàn)二

一、實(shí)驗(yàn)?zāi)康?/h2>

?掌握基本的同步與互斥算法,理解P,V操作

?學(xué)習(xí)使用Windows中基本的同步對(duì)象,掌握相關(guān)API的使用方法

了解Windows中多線(xiàn)程的并發(fā)執(zhí)行機(jī)制,實(shí)現(xiàn)進(jìn)程的同步與互斥

了解Wndows進(jìn)程間通信方法的典型類(lèi)型,如命名管道、文件映射等,掌握進(jìn)程間通信的基本原理

了解windows系統(tǒng)環(huán)境下的進(jìn)程通信機(jī)制,熟悉windows系統(tǒng)提供的進(jìn)程通信API

二、實(shí)驗(yàn)內(nèi)容

實(shí)驗(yàn)環(huán)境:DEV C++

任務(wù)一、進(jìn)程同步與互斥

1、使用臨界區(qū)對(duì)象模擬售票功能

其中SellPro_1, SellPro_2兩個(gè)函數(shù)分別對(duì)應(yīng)兩個(gè)售票進(jìn)程,一次售出一張票

#include <windows.h>
#include <iostream>
#define N 100
using namespace std;

DWORD WINAPI SellPro_1(LPVOID  lpParameter);
DWORD WINAPI SellPro_2(LPVOID  lpParameter );
DWORD WINAPI SellPro_3(LPVOID  lpParameter );

int tickets = N;

CRITICAL_SECTION critical_sec;//定義關(guān)鍵區(qū)域

DWORD WINAPI SellPro_1(LPVOID  lpParameter )
{
	while(TRUE)
	{
		Sleep(1);
		
		EnterCriticalSection( &critical_sec);
		//進(jìn)入關(guān)鍵區(qū)域
		if(tickets>0)
		{
			cout<< "thread1 sell ticket, remain: "<<--tickets<<endl;
		}
		else break;
		LeaveCriticalSection( &critical_sec);
		//離開(kāi)關(guān)鍵區(qū)域
	}
	
	return 0;
}

DWORD WINAPI SellPro_2(LPVOID  lpParameter )
{
	while(TRUE)
	{
		Sleep(1);
		
		EnterCriticalSection( &critical_sec);
		//進(jìn)入關(guān)鍵區(qū)域
		if(tickets>0)
		{
			cout<< "thread2 sell ticket, remain: "<<--tickets<<endl;
		}
		else break;
		LeaveCriticalSection( &critical_sec);
		//離開(kāi)關(guān)鍵區(qū)域
	}
	
	return 0;
}

int main()
{
	HANDLE hThread1;
	HANDLE hThread2;

	InitializeCriticalSection(&critical_sec);//初始化關(guān)健區(qū)域
	
	hThread1 = CreateThread(NULL,0,SellPro_1,NULL,0,NULL);
	hThread2 = CreateThread(NULL,0, SellPro_2,NULL,0,NULL);
	
	CloseHandle(hThread1);
	CloseHandle(hThread2);
	
	Sleep(4000);
	
	return 0;
}

進(jìn)程同步與進(jìn)程通信(#include <windows.h>)?

2、使用信號(hào)量對(duì)象模擬售票功能

其中SellPro_1, SellPro_2兩個(gè)函數(shù)分別對(duì)應(yīng)兩個(gè)售票進(jìn)程,一次售出一張票

#include <windows.h>
#include <iostream>
using namespace std;

static HANDLE g_hSemaphore = INVALID_HANDLE_VALUE;
static int g_Count = 100;

DWORD WINAPI Thread_A(LPVOID lpParamter);
DWORD WINAPI Thread_B(LPVOID lpParamter);

DWORD WINAPI Thread_A(LPVOID lpParamter)
{
	long count;
	
	while(1)
	{
		WaitForSingleObject(g_hSemaphore,INFINITE);
		if(g_Count>0)
		cout<<"thread_A sell ticket, remain: "<<--g_Count<<endl;
		else break;
		ReleaseSemaphore(g_hSemaphore,1,&count);
		
		Sleep(10);
	}
	
	return 0;
}

DWORD WINAPI Thread_B(LPVOID lpParamter)
{
	long count;
	
	while(1)
	{
		WaitForSingleObject(g_hSemaphore,INFINITE);
		if(g_Count>0)
		cout<< "thread_B sell ticket, remain: "<<--g_Count<<endl;
		else break;
		ReleaseSemaphore(g_hSemaphore,1,&count);
		
		Sleep(10);
	}
	
	return 0;
}

int main(int argc, char** argv)
{
	HANDLE threadA = INVALID_HANDLE_VALUE;
	HANDLE threadB = INVALID_HANDLE_VALUE;
	
	g_hSemaphore = CreateSemaphore(NULL,1,20,TEXT( "semaphore"));
	
	threadA = CreateThread(NULL,0,Thread_A,NULL,0,NULL);
	threadB = CreateThread(NULL,0,Thread_B,NULL,0,NULL);
	
	system("pause");
	
	CloseHandle(threadA);
	CloseHandle(threadB);

	return 0;
}

進(jìn)程同步與進(jìn)程通信(#include <windows.h>)

3、簡(jiǎn)單的生產(chǎn)者--消費(fèi)者問(wèn)題

一個(gè)緩沖區(qū),存放一個(gè)整型數(shù)據(jù)

#include <stdio.h>
#include <process.h>
#include <windows.h>

const int END_PRODUCE_NUMBER=20;
int g_Buffer;
CRITICAL_SECTION g_cs;
HANDLE g_hEventBufferEmpty, g_hEventBufferFull;

unsigned int __stdcall ProducerThreadFun(PVOID pM) //生產(chǎn)者進(jìn)程
{
	int i;
	
	for (i=1;i<=END_PRODUCE_NUMBER;i++)
	{
		WaitForSingleObject(g_hEventBufferEmpty, INFINITE);
		EnterCriticalSection(&g_cs);
		g_Buffer=i;
		printf("生產(chǎn)者將數(shù)據(jù)%d放入緩沖區(qū)\n",i);
		LeaveCriticalSection(&g_cs);
		SetEvent(g_hEventBufferFull);
		
		Sleep (1000);
	}
	
	return 0;
}

unsigned int __stdcall ConsumerThreadFun(PVOID pM) //消費(fèi)者進(jìn)程
{
	int flag=1;
	
	while(flag)
	{		
		WaitForSingleObject(g_hEventBufferFull, INFINITE);
		EnterCriticalSection(&g_cs);
		printf("消費(fèi)者從緩沖區(qū)中取出數(shù)據(jù)%d\n", g_Buffer);
		if(g_Buffer==END_PRODUCE_NUMBER) flag=0;
		LeaveCriticalSection(&g_cs);
		SetEvent(g_hEventBufferEmpty);
		
		Sleep(1000);
	}
	
	return 0;
}

int main()
{
	HANDLE hThread[2];
	
	printf("生產(chǎn)者消費(fèi)者問(wèn)題\n");
	
	InitializeCriticalSection(&g_cs);
	g_hEventBufferEmpty=CreateEvent(NULL, FALSE, TRUE, NULL);
	g_hEventBufferFull=CreateEvent(NULL, FALSE, FALSE, NULL);
	hThread[0]=(HANDLE)_beginthreadex(NULL, 0, ProducerThreadFun, NULL, 0, NULL);
	hThread[1]= (HANDLE)_beginthreadex(NULL, 0, ConsumerThreadFun, NULL, 0, NULL);
	WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
	
	CloseHandle(hThread[0]);
	CloseHandle(hThread[1]);
	CloseHandle(g_hEventBufferEmpty);
	CloseHandle(g_hEventBufferFull);
	
	DeleteCriticalSection(&g_cs);
	
	return 0;
}

進(jìn)程同步與進(jìn)程通信(#include <windows.h>)

任務(wù)二、進(jìn)程通信

服務(wù)程序server端每次發(fā)送兩個(gè)100之內(nèi)的整數(shù)

客戶(hù)程序client端實(shí)現(xiàn)將兩個(gè)整數(shù)相加,并輸出加法計(jì)算式

// Server端 

#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main(int argc, char *argv[])
{
	int nRetCode = 0;
	char szBuffer[3] ;
	
	system("color F0");
	
    // 創(chuàng)建一個(gè)特定大小的文件映射對(duì)象,名稱(chēng)為"ShareMemory"
	HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "ShareMemory" );   // 第一個(gè)參數(shù)也可以是NULL
	
    // 將這個(gè)文件映射對(duì)象的文件視圖映射到進(jìn)程的地址空間
	LPVOID lpBase =MapViewOfFile( hMapping,FILE_MAP_WRITE|FILE_MAP_READ,0,0,0);
	
	srand((unsigned)time(NULL));
	
	while(1)
	{	
		szBuffer[0]=rand()%100;
		szBuffer[1]=rand()%100;
		szBuffer[2]='\0';
		printf("%d\t%d\n",szBuffer[0],szBuffer[1]);
		
		// 向視圖中寫(xiě)入兩個(gè)100之內(nèi)的整數(shù)
        strcpy( (char* )lpBase, szBuffer);
        
		Sleep(1000) ;
	}
	
	Sleep(20000);
	UnmapViewOfFile(lpBase);
	CloseHandle(hMapping);
	
	return nRetCode;
}
// Client端 

#include <iostream>
#include <windows.h>
using namespace std;

int main(int argc, char *argv[])
{
	int nRetCode = 0;
	
	system("color EA");
	
	// 打開(kāi)這個(gè)名稱(chēng)為"ShareMemory"的文件映射對(duì)象	
	HANDLE hMapping = OpenFileMapping(FILE_MAP_ALL_ACCESS, NULL , "ShareMemory" );

	if (hMapping)
	{
		wprintf(L"%s \r\n",L"Success");
		
        // 把相同的文件映射視圖映射到自己的地址空間中
		LPVOID lpBase =MapViewOfFile( hMapping,FILE_MAP_READ| FILE_MAP_WRITE,0,0,0);
		
		char szBuffer[20] = {0};
		while(1)
		{
 			// 從視圖中讀取服務(wù)進(jìn)程所寫(xiě)入的數(shù)據(jù)
			strcpy (szBuffer, (char* )lpBase);
			printf("%d+%d=%d \n", szBuffer[ 0] , szBuffer[1], szBuffer[0]+szBuffer[1]);
			Sleep( 1000);
		}
		
		UnmapViewOfFile( lpBase);
		CloseHandle(hMapping);
	}
	
	else wprintf(L"%s",L"OpenMapping Error" );
	
	return nRetCode;
}

進(jìn)程同步與進(jìn)程通信(#include <windows.h>)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-489382.html

到了這里,關(guān)于進(jìn)程同步與進(jìn)程通信(#include <windows.h>)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Linux服務(wù)器同步Windows目錄同步-rsync

    Linux服務(wù)器同步Windows目錄同步-rsync

    最近需要,Linux的服務(wù)器同步Windows的一個(gè)目錄。查了下,大概有三種方法:網(wǎng)盤(pán)同步;rsync同步;掛載目錄。 網(wǎng)盤(pán)同步,可以選擇搭建一個(gè)Nextcloud 。但是問(wèn)題在于,我需要的是,客戶(hù)端和服務(wù)端的同步,而不是客戶(hù)端和客戶(hù)端的同步。服務(wù)端沒(méi)有界面,安裝客戶(hù)端的網(wǎng)盤(pán)軟件

    2024年02月11日
    瀏覽(27)
  • 操作系統(tǒng)實(shí)驗(yàn) 進(jìn)程的管道通信

    操作系統(tǒng)實(shí)驗(yàn) 進(jìn)程的管道通信

    目錄 一、實(shí)驗(yàn)?zāi)康?二、實(shí)驗(yàn)預(yù)備知識(shí) 三、實(shí)驗(yàn)內(nèi)容 四、實(shí)驗(yàn)結(jié)果分析 一、實(shí)驗(yàn)?zāi)康?(1)了解Linux系統(tǒng)中進(jìn)程通信的基本原理。 (2)了解和掌握管道通信機(jī)制。 二、實(shí)驗(yàn)預(yù)備知識(shí) (1)管道的概念 :管道是一種先入先出的、單向的、大小固定的通信通道。 寫(xiě)進(jìn)程在管道的

    2024年02月02日
    瀏覽(21)
  • 《嵌入式系統(tǒng)開(kāi)發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信

    《嵌入式系統(tǒng)開(kāi)發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信

    一、 實(shí)驗(yàn)?zāi)康?掌握無(wú)名管道與有名管道的進(jìn)程通信; 掌握消息隊(duì)列的讀寫(xiě)操作; 掌握共享內(nèi)存的通信機(jī)制。 二、 實(shí)驗(yàn)任務(wù)與要求 管道讀寫(xiě)程序的編寫(xiě)與應(yīng)用; 消息隊(duì)列的發(fā)送和接收程序的編寫(xiě)和應(yīng)用; 共享內(nèi)存的創(chuàng)建、連接和分離編程和應(yīng)用。 三、 實(shí)驗(yàn)工具和環(huán)境

    2024年02月07日
    瀏覽(93)
  • Linux和windows進(jìn)程同步與線(xiàn)程同步那些事兒(三): Linux線(xiàn)程同步詳解示例

    Linux和windows進(jìn)程同步與線(xiàn)程同步那些事兒(一) Linux和windows進(jìn)程同步與線(xiàn)程同步那些事兒(二): windows線(xiàn)程同步詳解示例 Linux和windows進(jìn)程同步與線(xiàn)程同步那些事兒(三): Linux線(xiàn)程同步詳解示例 Linux和windows進(jìn)程同步與線(xiàn)程同步那些事兒(四):windows 下進(jìn)程同步 Linux和wi

    2024年02月01日
    瀏覽(34)
  • C++ Windows進(jìn)程間共享內(nèi)存通信

    C++ Windows進(jìn)程間共享內(nèi)存通信

    在項(xiàng)目工程中需要64位程序調(diào)用32位程序并加以通信。 實(shí)現(xiàn)了兩個(gè)進(jìn)程間的內(nèi)存共享。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 1、進(jìn)程間通信原理: 主要實(shí)現(xiàn): ? 系統(tǒng)使用內(nèi)存映射文件,以便加載和執(zhí)行. exe和DLL文件。這可以大大節(jié)省頁(yè)文件空間和應(yīng)用程序啟動(dòng)

    2024年02月03日
    瀏覽(18)
  • 【Linux】詳解進(jìn)程通信中信號(hào)量的本質(zhì)&&同步和互斥的概念&&臨界資源和臨界區(qū)的概念

    【Linux】詳解進(jìn)程通信中信號(hào)量的本質(zhì)&&同步和互斥的概念&&臨界資源和臨界區(qū)的概念

    ???????? 訪(fǎng)問(wèn)資源在安全的前提下,具有一定的順序性,就叫做同步 。在多道程序系統(tǒng)中,由于資源有限,進(jìn)程或線(xiàn)程之間可能產(chǎn)生沖突。同步機(jī)制就是為了解決這些沖突,保證進(jìn)程或線(xiàn)程之間能夠按照既定的順序訪(fǎng)問(wèn)共享資源。同步機(jī)制有助于避免競(jìng)態(tài)條件和死鎖(

    2024年04月25日
    瀏覽(91)
  • Windows開(kāi)機(jī)后,Docker失敗:Commoncauses include access rights issues

    Windows開(kāi)機(jī)后,Docker失敗:Commoncauses include access rights issues

    這種錯(cuò)誤看似已經(jīng)跟你說(shuō)很清楚了,但是看國(guó)外docker社區(qū)也提到這個(gè)問(wèn)題,一大堆回答解決了別人的問(wèn)題,但未必解決你的。我寫(xiě)自己的方案,可能也未必適合你,如果要說(shuō)Root Cause根源就是windows的虛擬化功能開(kāi)啟的問(wèn)題。 An unexpected error was encountered while executing a WSL command,

    2024年01月21日
    瀏覽(12)
  • MobaXterm使sftp目錄與cmd目錄同步

    MobaXterm使sftp目錄與cmd目錄同步

    這里我們會(huì)選擇內(nèi)存占用較低的MobarXterm作為SSH客戶(hù)端,其官網(wǎng)地址: https://mobaxterm.mobatek.net/ 安裝完成后界面如圖所示: 點(diǎn)擊session按鈕,進(jìn)入會(huì)話(huà)管理: 在彈出的session管理頁(yè)面中,按照下圖填寫(xiě)信息并保存: 點(diǎn)擊OK后會(huì)提示你是第一次連接,詢(xún)問(wèn)你是信任連接的服務(wù): 選

    2024年02月07日
    瀏覽(34)
  • 操作系統(tǒng):4、進(jìn)程管理之進(jìn)程同步

    操作系統(tǒng):4、進(jìn)程管理之進(jìn)程同步

    上述過(guò)程,若并發(fā)執(zhí)行就會(huì)出現(xiàn)緩沖區(qū)數(shù)據(jù)出錯(cuò) “哲學(xué)家進(jìn)餐問(wèn)題中會(huì)發(fā)生極端情況,所有哲學(xué)家都餓死,也就是所有進(jìn)程都陷入等待狀態(tài)” “生產(chǎn)者消費(fèi)者問(wèn)題”以及“哲學(xué)家進(jìn)程問(wèn)題”的根源問(wèn)題是:彼此相互之間沒(méi)有通信。 若生產(chǎn)者通知消費(fèi)者我已經(jīng)完成一件產(chǎn)品生

    2023年04月26日
    瀏覽(27)
  • linux 查看某個(gè)進(jìn)程所在目錄

    linux 查看某個(gè)進(jìn)程所在目錄

    1、通過(guò) ps -ef | grep xxx 查看進(jìn)程信息 2、通過(guò) ll /proc/PID 命令查看進(jìn)程所在目錄位置 Linux在啟動(dòng)一個(gè)進(jìn)程時(shí),系統(tǒng)會(huì)在 /proc 下創(chuàng)建一個(gè)以PID命名的文件夾,在該文件夾下會(huì)有我們的進(jìn)程的信息,其中包括一個(gè)名為exe的文件即記錄了絕對(duì)路徑,通過(guò) ll 或 ls –l 命令即可查看. cw

    2024年02月16日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包