gpt4 book ai didi

c - 不知道长度的二维全局数组。最佳实践?

转载 作者:行者123 更新时间:2023-11-30 17:17:11 24 4
gpt4 key购买 nike

我需要有缓冲区,以便在多种不同类型的线程中使用它。所以数组需要是全局的。

缓冲区大小和缓冲区数量作为程序的输入给出。

作为替代方案,我也许可以实现链接列表。

实现此类缓冲区的最佳方法是什么?可以提供 sample 吗?

感谢任何帮助!

最佳答案

我不明白“不知道长度”是什么意思,如果您传递每个缓冲区的大小和缓冲区的数量作为输入参数,那么您就知道每个所需的长度。

也许这不是最好的,但这就是我的方式。

首先声明全局缓冲区和线程。

static void ** buffer;
pthread_t tid[2];

这里描述了线程如何工作。第一个缓冲区将向前两个子缓冲区分配数据。第二个将对另外两个执行相同的操作。

void *assignBuffer(void *threadid) {

pthread_t id = pthread_self();

if (pthread_equal(id, tid[0])) {
strcpy(buffer[0], "foo");
strcpy(buffer[1], "bar");
} else {
strcpy(buffer[2], "oof");
strcpy(buffer[3], "rab");
}
return NULL;
}
  1. 将程序参数从字符串转换为整数。
  2. 这里我们用未知类型的数组分配缓冲区。
  3. 在这里,我们为每个缓冲区分配其大小(以字节为单位)。
  4. 最后我们创建工作线程。重要的是他们将同时运行。
  5. 等待所有线程完成其工作。
  6. 简单的打印缓冲区内容。

好的,这是代码。

int main(int argc, char **argv) {
//1
int bufferSize = atoi(argv[1]);
int buffersAmount = atoi(argv[2]);

//2
buffer = malloc(sizeof(void *)*buffersAmount);

//3
int i;
for (i = 0; i < buffersAmount; ++i) {
buffer[i] = malloc(bufferSize);
}

//4
i = 0;
while (i < 2) {
pthread_create(&tid[i], NULL, &assignBuffer, NULL);
++i;
}

//5
for (i = 0; i < 2; i++)
pthread_join(tid[i], NULL);

//6
for (i = 0; i < 4; ++i) {
printf("%d %s\n", i, (char*)buffer[i]);
}
for (i = 0; i < buffersAmount; ++i) {
free(buffer[i]);
}
return 0;
}

如果您有不明白的地方,请随时询问,也很抱歉我的英语,这不是我的母语。

关于c - 不知道长度的二维全局数组。最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29459434/

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