北京電子科技學院(BESTI)
實 驗 報 告
課程:資訊安全系統設計基礎 班級:1352 姓名:呂松鴻 馬啟揚
學号:20135229 20135234 成績: 指導教師:婁嘉鵬 實驗日期::2015.11.10
實驗密級: 預習程度: 實驗時間:15:30—17:30
儀器組次: 必修/選修:必修 實驗序号:02
一、實驗内容
1.開發環境的配置同實驗一。
2.将實驗代碼拷貝到共享檔案夾中。
3.在虛拟機中編譯代碼。
對于多線程相關的代碼,編譯時需要加-lpthread 的庫。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5CMzUDOyQTN5MTMtETM4MTNwUDMyMjMxETNxAjMtkTM0UDN38CXxETNxAjMvwVOxQTN0czLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.jpg)
4.下載下傳調試
在超級終端中運作可執行檔案pthread,運作可執行檔案term。
二、代碼解析
(1)分析
- 這個代碼是生産者-消費者問題模型的實作。
- 主程式中分别啟動生産者線程和消費者 線程。生産者線程不斷順序地将0到1000的數字寫入共享的循環緩沖區,同時消費者線程不斷地從共享的循環緩沖區讀取資料。
- 生産者首先要獲得互斥鎖,并且判斷寫指針+1 後是否等于讀指針,如果相等則進入等待狀态,等候條件 變量notfull;如果不等則向緩沖區中寫一個整數,并且設定條件變量為notempty,最後釋放互斥鎖。
(2)源代碼注釋
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "pthread.h"
#define BUFFER_SIZE 16
/* 設定一個整數的圓形緩沖區 */
struct prodcons {
};
/*初始化緩沖區:初始化緩存指針資訊(信号量)*/
void init(struct prodcons * b)
pthread_mutex_init(&b->lock, NULL);
pthread_cond_init(&b->notempty, NULL);
pthread_cond_init(&b->notfull, NULL);
b->readpos = ;
b->writepos = ;
}
/* 向緩沖區中寫入一個整數*/
void put(struct prodcons * b, int data)
printf ( "wait for not full\n" );
}
b->writepos++;
if (b->writepos >= BUFFER_SIZE) b->writepos = ;
}
/*從緩沖區中讀出一個整數 */
int get(struct prodcons * b)
int data;
printf ( "wait for not empty\n" );
}
b->readpos++;
if (b->readpos >= BUFFER_SIZE) b->readpos = ;
return data;
}
#define OVER (-1)
struct prodcons buffer;
/*實作一個生産者程式:生産者線程不斷順序地将0到1000的數字寫入共享的循環緩沖區,當生産-1時,程式終止。*/
void * producer( void * data)
int n;
printf ( " put-->%d\n" , n);
put(&buffer, n);
}
put(&buffer, OVER);
printf ( "producer stopped!\n" );
return NULL;
}
/*消費掉緩存中生産出來的資料:消費者線程不斷地從共享的循環緩沖區讀取資料,當消費-1時,程式終止*/
void * consumer( void * data)
int d;
while ( 1 )
d = get(&buffer);
if (d == OVER ) break ;
printf ( " %d-->get\n" , d);
}
printf ( "consumer stopped!\n" );
return NULL;
}
int main(void)
pthread_t th_a, th_b;
void * retval;
init(&buffer);
pthread_create(&th_a, NULL, producer, );
pthread_create(&th_b, NULL, consumer, );
pthread_join(th_a, &retval);
pthread_join(th_b, &retval);
return ;
}
1.找不到檔案
- 檔案夾壓縮拷貝到共享檔案夾bc之後,進入虛拟機,在指令行輸入./install.sh配置編譯環境失敗。顯示install.sh not found。
- 我們打開的指令行所在的是系統預設位置,應該進入bc再輸入指令。
2.執行./term錯誤
可以通過方法建立一個連接配接來解決。首先在超級終端中進入/dev檔案夾中。
輸入指令“ln –sf /dev/tts/0 /dev/ttyS0” 注意空格與字母l、數字0
轉載于:https://www.cnblogs.com/lv-20135229/p/4989661.html