我正在编写一个多线程网络程序。我需要声明一个 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/