从不同的线程访问静态函数/变量

时间:2017-05-13 04:52:23

标签: c multithreading static

我使用了用C编写的第三个侧库。它被设计为以单例形式运行,并包含大量静态函数,变量和用户界面。我需要能够使用多个实例运行它,以便它们不会相互干扰。例如,如果一个线程设置静态变量

    editabltText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable)
        {


        }
    });

第二个线程仍然看到index = 0。 我不确定是否有可能实施。

1 个答案:

答案 0 :(得分:0)

你所要求的是不可能的。

为了教学目的,我们假设您使用的是unix机器。

任何进程(例如可执行文件./a.out)都具有以下内存布局:

  1. 文本
  2. 数据
    • 初始化
    • 未初始化
  3. 堆栈
  4. 当你创建一个线程时,它共享所有这些内存段除了 Stack 部分(基本上每个线程都获得一个新的堆栈指​​针)。

    此外,静态变量存储在 Data 段(在您的情况下为初始化数据段)中,这是一个共享内存段,因此当一个线程更改它时,它也会更改所有其他线程

    所以线程只有自己本地的以下内容

    • 堆栈指针

    • 程序计数器

    • 寄存器

    memory layout for multithreaded processes

    图片来源:llnl.gov

    希望它有所帮助: - )。