我正在创建一个程序,其中有多个线程使用相同的缓冲区。我将全局缓冲区创建为int *buffer,并使用malloc动态地在main()中声明大小。缓冲区的重点是让所有线程使用这个缓冲区,我想知道每个线程如何修改缓冲区中的某个位置,以便所有线程都能看到这个变化。
例如:
int *buffer;
int main(int argc, char *argv[]){
buffer = (int *)malloc(10 * sizeof(int));
}现在,我想知道一个线程将在其中工作的函数,一个线程如何修改buffer的某个点,以便所有其他线程都能在全局数组buffer中看到这一变化。
在线程使用的函数中,我是否可以正常地更改这个位置?
例如:
void *thread_work(void *unused){
//beginning code
buffer[0] = 2;
//ending code
}当我用这段代码编译时,它编译得很好,但我想知道现在是否所有的p线程都将buffer[0]设置为2。
我将使用互斥锁进行同步,这样就不会成为我问题的一部分,因为我知道如何实现这个问题。
谢谢您抽时间见我!
发布于 2018-11-29 05:01:31
线程没有特殊的函数或运算符来执行内存上的操作,无论是本地的、线程本地的还是共享的。他们只是使用相同的语法和技术,就像他们是程序中唯一的线程一样。
但它们确实需要正确地同步对共享变量的访问。您说您已经很熟悉这一点,所以我不会详细介绍,只是说如果没有同步,不同的线程确实不一定会看到对方写的东西。
https://stackoverflow.com/questions/53532021
复制相似问题