日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统实践(八)

發布時間:2025/3/15 windows 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统实践(八) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??本次實驗課程內容沒有更新,留了一個作業,還是對于線程的訓練,內容如下:

??按照上節課的內容,對代碼進行下修改,如下:

#include<stdlib.h> #include<stdio.h> #include<pthread.h>#define NUMBER 10 #define CPU_NUM 2 #define CHILD (NUMBER/CPU_NUM) int array[10] = {12,7,9,10,11,16,3,5,7,20};struct param {int start;int end; };struct result {int sum[CHILD]; };void *select_sort(void *arg) {struct param *param;struct result *result;param = (struct param *)arg; // 參數都是void *,要轉成對應的類型for (int i=param->start; i<param->end; i++) {for (int j=0; j<param->end-i-1; j++) {if (array[param->start+j] > array[param->start+j+1]) {int temp;temp = array[param->start+j];array[param->start+j] = array[param->start+j+1];array[param->start+j+1] = temp;}}}result = malloc(sizeof(struct result));for (int i=0; i<5; i++) {result->sum[i] = array[param->start+i];}return result; }int main() {pthread_t son[CPU_NUM]; struct param params[CPU_NUM]; // 必須要申請,否則段錯誤for (int i=0; i<CPU_NUM; i++) {// param不可作為臨時變量,都必須是params的地址struct param *param; param = &params[i];param->start = i*CHILD;param->end = (i+1)*CHILD;pthread_create(&son[i], NULL, select_sort, param);}double sum = 0;int son1[CHILD]; // son1存儲子線程1結果int son2[CHILD]; // son2存儲子線程2結果int ending[10];for (int i=0; i<CPU_NUM; i++) {struct result *result;pthread_join(son[i], (void **)&result);if (i == 0) {for (int j=0; j<CHILD; j++) {son1[j] = result->sum[j];}}else {for (int j=0; j<CHILD; j++) {son2[j] = result->sum[j];}}free(result); // 用完一定要釋放}// 主進程歸并排序int p,q;int index = 0;for (p=0,q=0; p<CHILD&&q<CHILD;) {if (son1[p] < son2[q]) {ending[index++] = son1[p++]; }else {ending[index++] = son2[q++];}}if (p == CHILD) {for (;q<CHILD;q++) {ending[index++] = son2[q];}}else if (q == CHILD) {for (;p<CHILD;p++) {ending[index++] = son1[p];}}for (int i=0; i<10; i++) {printf("%d ", ending[i]);}return 0; }

??對于這個代碼有幾個地方值得商榷:
??1.題中要求是選擇排序,但我用了冒泡排序。但不影響訓練目標
??2.這里使用了son1,son2存儲排序結果,顯得有些多余,不知道這樣可不可以?是否能在線程的邏輯語句中就把數據處理好。
??3.這里面對于待排序的數組設置為靜態數組,但擴展性不夠好。應當動態統計排序個數。

因作者水平有限,如果錯誤之處,請在下方評論區指正,謝謝!

總結

以上是生活随笔為你收集整理的操作系统实践(八)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。