gpt4 book ai didi

c - Posix Pthread 互斥

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:04 27 4
gpt4 key购买 nike

我已经在代码的注释中写下了我的问题。

我正在尝试使用 pthreads 使我的代码并行。首先,我想通过多个线程并行地在内存中写入大量数据。写入数据后,我想通过相同的线程执行此数据。执行数据后,我想读取它。而在这三个操作之后,我想把这个数据传递给其他文件。我想多次重复这个过程。

非常感谢您的帮助。谢谢。

#include <pthread.h>
#include <stdio.h>

#define ARRAYSIZE 100
#define NUMTHREADS 7

struct ThreadData {
int start, stop, id;
int* array;
};

/* function to write, execute and read data */
void* cal(void* td) {
struct ThreadData* data=(struct ThreadData*) td;
int start=data->start;
int stop=data->stop;
int thread_id = data ->id;
int i,s, counter;
counter = 0;

//main loop
for (s=0; s<200; s++){

// in this loop1, I want to write data here by all the threads
for (i=start; i<stop; i++) {
printf("thread %d is writing data\n", thread_id);
}

//in this loop2, after data written by all the threads in loop1,
// data is execuated by all threads in this loop2
for (i=start; i<stop; i++) {
printf("thread %d is executing data\n", thread_id);
}

//in this loop3, data is read after completion of
// writing and execution in loop1 and loop2
for (i=start; i<stop; i++) {
printf("thread %d is reading data\n", thread_id);
}

// counter, I want this counter to be executed only once
// per iteration after writing, executing and reading data.
counter = counter +1;
printf ("Value of counter is %d\n", counter);

}

return NULL;
}

int main(void) {
int array[ARRAYSIZE];
pthread_t thread[NUMTHREADS];
struct ThreadData data[NUMTHREADS];
int i;

int tasksPerThread=(ARRAYSIZE+NUMTHREADS-1)/NUMTHREADS;

/* Divide work for threads, prepare parameters */
for (i=0; i<NUMTHREADS; i++) {
data[i].start=i*tasksPerThread;
data[i].stop=(i+1)*tasksPerThread;
data[i].array=array;
data[i].id = i;
}
/* the last thread must not go past the end of the array */
data[NUMTHREADS-1].stop=ARRAYSIZE;

/* Launch Threads */
for (i=0; i<NUMTHREADS; i++) {
pthread_create(&thread[i], NULL, cal, &data[i]);
}

/* Wait for Threads to Finish */
for (i=0; i<NUMTHREADS; i++) {
pthread_join(thread[i], NULL);
}

return 0;
}

最佳答案

我认为你只需要对计数器进行互斥,所以在它之前做一个线程同步步骤就足够了。

关于c - Posix Pthread 互斥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21826376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com