Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #103849

Re: Memory not updating in thread as expected

From "Chris M. Thomasson" <invalid@invalid.invalid>
Newsgroups comp.lang.c
Subject Re: Memory not updating in thread as expected
Date 2017-02-13 15:13 -0800
Organization n/a
Message-ID <o7teg7$ij4$1@dont-email.me> (permalink)
References <s023ac5gl1bpefvi63upl7tb6iunf0a8mo@4ax.com> <d52fe51a-1f8d-47fe-9283-5f1c13f5a05d@googlegroups.com> <87a89qtb71.fsf@bsb.me.uk>

Show all headers | View raw


On 2/13/2017 6:30 AM, Ben Bacarisse wrote:
> m.labanowicz@gmail.com writes:
>
>> I assume that there is another case with optimizer (it depends on declaration):
>>
>>> // str2 has the address of str1 in the thread, ie. (long)str1==(long)str2
>>> str2[0]=0;  // signal thread that it should exit the loop
>>> printf("%d\n",(int)str2[0]);   // "0" is shown
>>> // {int i11;for (i11=0;i11<8;i11++) printf("[%.2X]",str2[i11]);printf("\n");}
>>> while (str2[0]==0)
>>>    { // waiting for the thread to signal it's about to finish
>>>    printf("%d\n",(int)str2[0]);   // "50" is shown WTF??
>>>    sleep(1);
>>>    }
>>> printf("Done %d\n",(int)str2[0]);   // "50" is shown WTF??
>>
>> Loop 'while (str2[0]==0)' can be replaced by optimizer to 'while (1)'.
>>
>> Solution for this is to declare str2 with 'volatile' keyword:
>> volatile char * str2;
>
> That often works, but when it does, it sort of works by accident!
>
> To the OP: the only reliable and portable solution is to use proper
> thread synchronisation techniques.  If you have C11, it (optionally) has
> them, but if not you may need to use something else like POSIX threads.

Agreed. Fwiw, C11 is not supported on my systems yet. However, one can 
export their mostly likely, working C++11 threading layer in a form that 
creates a C11 layer... I wrote this half-as%ed, layer from scratch wrt 
PThreads going in that direction:

https://groups.google.com/d/topic/comp.lang.c/WPH7ed5uS4Y/discussion
(does not support 100% C11!, half-baked.)

The problem is that when you have a set of compilers that do not support 
threading in C11, well, one tends to use the C++ threading that is most 
likely supported! Damn.


> But if you are working on an embedded project, the implementation may
> make enough guarantees (beyond what standard C says) so that you can
> roll your own reliable shared memory accesses.
>

Agreed.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Memory not updating in thread as expected Test <test@.nil.invalid.com> - 2017-02-13 12:46 +0200
  Re: Memory not updating in thread as expected m.labanowicz@gmail.com - 2017-02-13 05:18 -0800
    Re: Memory not updating in thread as expected Test <test@.nil.invalid.com> - 2017-02-13 16:25 +0200
      Re: Memory not updating in thread as expected m.labanowicz@gmail.com - 2017-02-13 10:30 -0800
        Re: Memory not updating in thread as expected Jerry Stuckle <jstucklex@attglobal.net> - 2017-02-13 14:30 -0500
  Re: Memory not updating in thread as expected m.labanowicz@gmail.com - 2017-02-13 05:46 -0800
    Re: Memory not updating in thread as expected Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-13 14:30 +0000
      Re: Memory not updating in thread as expected "Chris M. Thomasson" <invalid@invalid.invalid> - 2017-02-13 15:13 -0800
    Re: Memory not updating in thread as expected Test <test@.nil.invalid.com> - 2017-02-13 16:36 +0200
      Re: Memory not updating in thread as expected David Brown <david.brown@hesbynett.no> - 2017-02-13 23:15 +0100
        Re: Memory not updating in thread as expected James Kuyper <jameskuyper@verizon.net> - 2017-02-13 22:04 -0500
          Re: Memory not updating in thread as expected David Brown <david.brown@hesbynett.no> - 2017-02-14 09:44 +0100
            Re: Memory not updating in thread as expected Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-14 11:07 +0000
              Re: Memory not updating in thread as expected David Brown <david.brown@hesbynett.no> - 2017-02-14 12:46 +0100
                Re: Memory not updating in thread as expected Robert Wessel <robertwessel2@yahoo.com> - 2017-02-16 05:12 -0600
                Re: Memory not updating in thread as expected David Brown <david.brown@hesbynett.no> - 2017-02-16 12:44 +0100
              Re: Memory not updating in thread as expected Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2017-02-14 15:53 +0100
                Re: Memory not updating in thread as expected Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-14 15:36 +0000
                Re: Memory not updating in thread as expected Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2017-02-14 17:58 +0100
                Re: Memory not updating in thread as expected Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-14 17:26 +0000
          Re: Memory not updating in thread as expected Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2017-02-14 10:43 +0100
            Re: Memory not updating in thread as expected Robert Wessel <robertwessel2@yahoo.com> - 2017-02-14 03:52 -0600
              Re: Memory not updating in thread as expected Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2017-02-14 11:36 +0100
              Re: Memory not updating in thread as expected supercat@casperkitty.com - 2017-02-14 05:31 -0800
  Re: Memory not updating in thread as expected Ken Brody <kenbrody@spamcop.net> - 2017-02-13 12:44 -0500
  Re: Memory not updating in thread as expected Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2017-02-13 10:58 -0700
  Re: Memory not updating in thread as expected "Chris M. Thomasson" <invalid@invalid.invalid> - 2017-02-14 15:13 -0800
    Re: Memory not updating in thread as expected "Chris M. Thomasson" <invalid@invalid.invalid> - 2017-02-14 16:37 -0800

csiph-web