Discussions of the Parallel Programming book
 help / color / mirror / Atom feed
* [Q] READ_ONCE(x)++
@ 2016-12-29  2:54 Akira Yokosawa
  2016-12-29  3:43 ` Paul E. McKenney
  0 siblings, 1 reply; 2+ messages in thread
From: Akira Yokosawa @ 2016-12-29  2:54 UTC (permalink / raw)
  To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa

Hi Paul,

As I'm not so familiar with Linux kernel programming,
I found the following hunk in commit 7945ae1a06c5 difficult to grasp at first glance.

@@ -564,7 +584,7 @@ the other will wait until the first thread releases the lock.
  38     exit(-1);
  39   }
  40   for (i = 0; i < 3; i++) {
- 41     ACCESS_ONCE(x)++;
+ 41     READ_ONCE(x)++;
  42     poll(NULL, 0, 5);
  43   }
  44   if (pthread_mutex_unlock(pmlp) != 0) {

"The name READ_ONCE() seems to imply it is used for read access, but what
happens when it is used with a "++" operator?" was what I thought.

"ACCESS_ONCE(x)++" was already somewhat confusing for me.

Once you know its definition, you can see there is no problem. But it still
looks strange...

Don't kernel programmers feel strangeness in "READ_ONCE(x)++"?

This is just a random question. But if you could add some explanation of the
usage, that would be of help for novice programmers.

                                            Thanks, Akira


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Q] READ_ONCE(x)++
  2016-12-29  2:54 [Q] READ_ONCE(x)++ Akira Yokosawa
@ 2016-12-29  3:43 ` Paul E. McKenney
  0 siblings, 0 replies; 2+ messages in thread
From: Paul E. McKenney @ 2016-12-29  3:43 UTC (permalink / raw)
  To: Akira Yokosawa; +Cc: perfbook

On Thu, Dec 29, 2016 at 11:54:02AM +0900, Akira Yokosawa wrote:
> Hi Paul,
> 
> As I'm not so familiar with Linux kernel programming,
> I found the following hunk in commit 7945ae1a06c5 difficult to grasp at first glance.
> 
> @@ -564,7 +584,7 @@ the other will wait until the first thread releases the lock.
>   38     exit(-1);
>   39   }
>   40   for (i = 0; i < 3; i++) {
> - 41     ACCESS_ONCE(x)++;
> + 41     READ_ONCE(x)++;
>   42     poll(NULL, 0, 5);
>   43   }
>   44   if (pthread_mutex_unlock(pmlp) != 0) {
> 
> "The name READ_ONCE() seems to imply it is used for read access, but what
> happens when it is used with a "++" operator?" was what I thought.
> 
> "ACCESS_ONCE(x)++" was already somewhat confusing for me.
> 
> Once you know its definition, you can see there is no problem. But it still
> looks strange...
> 
> Don't kernel programmers feel strangeness in "READ_ONCE(x)++"?
> 
> This is just a random question. But if you could add some explanation of the
> usage, that would be of help for novice programmers.

Heh!  Good catch, thank you!

This would give a compiler error in the Linux kernel (I think, anyway),
but worked by accident given the definitions perfbook uses.

I have fixed this with your Reported-by.

							Thanx, Paul


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-12-29  3:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-12-29  2:54 [Q] READ_ONCE(x)++ Akira Yokosawa
2016-12-29  3:43 ` Paul E. McKenney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox