c - 执行后初始化一个 char 数组,因为大小最初未知

标签 c arrays multithreading

我正在编写一个多线程网络程序。我需要声明一个 char 数组,以便两个线程都可以看到它。唯一的问题是,我一开始不知道数组有多大,因为我必须等待网络上的另一台计算机告诉我。当我发现时,线程已经创建了。至关重要的是,sharedBuffer 的大小必须准确无误。

伪代码如下:

int bufSize;
char sharedBuffer[1]; //Ideally, sharedBuffer[bufSize]
                   //bufSize is not known yet, though.
                   //I don't know the best thing to declare here

int main(int argc, char* argv[]){
    pthread_t ThreadA;
    pthread_t ThreadB;
    pthread_create(&ThreadA,0,&funcA,0);
    pthread_create(&ThreadB,0,&funcB,0);
}

void *funcA(){
    bufSize = getSize();//getSize implementation irrelevant, but working
                        //Small numbers expected. Probably no higher than 1024
    //Initialize sharedBuffer here
    sharedBuffer = realloc(sharedBuffer,bufSize*sizeof(char));
    //Instinct tells me "sharedBuffer = new char[bufSize];"
    //    but I know C wont let me do that

    //semaphore post
}

void *funcB(){
    //semaphore wait (blocks until threadA posts)

    printf("Size of shared buffer: %d\n",sizeof(sharedBuffer));
    //needs to output bufSize
    //actual value is irrelevant. Data just needs to be shared correctly.
}

编辑:更多信息,因为似乎没有人理解我的问题。我对计时和信号量没有问题。线程之间共享数据也不存在问题。线程创建也不存在问题。

我的问题是我不知道如何将共享缓冲区声明为数组类型,以便稍后可以由一个线程初始化它,以便两个线程都可以使用它。我也不知道如何进行初始化。

最佳答案

就这么做

char *sharedBuffer=NULL;

printf("Size of shared buffer: %d\n",bufSize);

你的问题是线程 a 分配了它。您需要推迟线程 B 直到线程 A 设置缓冲区。或者做一些信号/锁定

关于c - 执行后初始化一个 char 数组,因为大小最初未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041268/

相关文章:

c - 失去对循环变量的依赖 - 循环优化

java - 简单数组的问题

c# - 检查用户输入是否在我的数组中

python - 使用 Paho MQTT 在 Python 中订阅 MQTT 时出现线程问题

objective-c - dispatch_async 自定义队列永远不会退出 block

c - int x[size]={0} 的行为

c - 如何清除 C 中的 unsigned char 数组位?

从汇编代码调用库中的 C 函数

c - 我无法将十六进制值扫描到 C 中的数组中

javascript - 显示延迟加载动画