1 Star 0 Fork 0

杨谨徽 / 代码托管

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
c4.3.c 1.85 KB
一键复制 编辑 原始数据 按行查看 历史
杨谨徽 提交于 2023-10-26 13:28 . add c4.3.c.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define N 4
int A[N][N];
int total = 0; // global total
pthread_mutex_t *m; // mutex pointer
void *func(void *arg) // working thread function
{
int i, row, sum = 0;
pthread_t tid = pthread_self(); // get thread ID number
row = (int)arg; // get row number from arg
printf ("Thread %d [%lu] computes sum of row %d\n", row, tid, row);
for (i=0; i<N; i++) //compute partial sum of A[ row ]in
sum += A[row][i];
printf("Thread %d [%lu] update total with %d : ", row, tid, sum);
pthread_t mutx_lock(m);
total += sum; // update global total inside a CR
pthread_mutex_unlock(m);
printf("total = %d\n", total);
}
int main (int argc, char *argv[])
{
pthread_t thread[N];
int i, j, r, sum[10];
void *status;
printf("Main: initialize A matrix\n");
for (i=0; i<N; i++){
sum[i] = 0;
for (j=0; j<N; j++){
A[i][j] = i*N + j + 1;
printf("%4d ", A[i][j]);
}
printf("\n");
}
// create a mutex m
m = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(m, NULL); // initialize mutex m
printf("Main: create %d threads\n", N);
for(i=0; i<N; i++){
pthread_create(&thread[i], NULL, func, (void *)i);
}
printf("Main: try to join with threads\n");
for(i=0; i<N; i++){
pthread_join(thread[i], &status);
printf("Main: joined with %d [%lu]: status=%d\n",
i, thread[i], (int)status);
}
printf("Main: tatal = %d\n", total);
pthread_mutex_destroy(m); // destroy mutex m
pthread_exit(NULL);
}
1
https://gitee.com/SHIBATORI/code-hosting.git
git@gitee.com:SHIBATORI/code-hosting.git
SHIBATORI
code-hosting
代码托管
master

搜索帮助