What is the difference between a threadvar and a local variable

后端 未结 2 1886
南笙
南笙 2021-02-06 03:35

In my threads, I always declare local variables \"normally\", thus:

procedure TMyThread.Execute ;

var
   i : integer ;

begin
i := 2 ;

etc, I

相关标签:
2条回答
  • 2021-02-06 03:42

    Well for a start the code with the threadvar is invalid syntax. A threadvar needs to have unit scope rather than local scope.

    Local variable

    Each invocation (including from different threads, and re-entrant calls) of a function results in different instances of that function's local variables.

    Thread local variable

    A thread local variable has separate instances for each thread in the process. There is a one-to-one mapping between instances of the variable and threads.

    Discussion

    If your procedure is not re-entrant, and it is the only procedure that refers to the variable then there will be no semantic difference between a local variable and a threadvar – but if a local variable can be used then it should be.

    In terms of performance the threadvar is slower than a local variable and may not even work in the context of a DLL.

    My recommendation is to use a local variable wherever it is possible to do so. Use a threadvar (or Thread Local Storage (TLS) when in a DLL) if you need a variable of global scope that has a single instance per thread. However, such need is rare and has the severe downside that thread local variables have many of the same drawbacks as true global variables.

    0 讨论(0)
  • 2021-02-06 03:46

    By using ThreadVar keyword, each thread is given a separate instance of each variable, thereby avoiding data conflicts, and preserving thread independence.

    Also you do not need to protect your threadvar variables in critical sections, due to the fact that are local to the thread.

    best regards,
    Radu

    0 讨论(0)
提交回复
热议问题