comp.lang.ada
 help / color / mirror / Atom feed
From: Brad Moore <brad.moore@shaw.ca>
Subject: Re: Safety of unprotected concurrent operations on constant objects
Date: Mon, 12 May 2014 22:50:03 -0600
Date: 2014-05-12T22:50:03-06:00	[thread overview]
Message-ID: <%vhcv.255737$s87.168969@fx11.iad> (raw)
In-Reply-To: <1qq0ryc8c4l2m.1driqwwiwwl02.dlg@40tude.net>

On 14-05-12 02:13 AM, Dmitry A. Kazakov wrote:
> As a side note safety is not about
> halting or time constraints. A never ending subprogram could be still safe.
> Overstretching this a bit, a task body running infinite loop is task-safe.

Right. And that would still be the case by the rules I have been 
suggesting. (Note the distinction between "task safe" proper and 
Task_Safe the aspect, with an underscore.) The idea is that subprograms 
that have either Task_Safe or Potentially_Blocking aspects are task safe.

I lumped task safe programs with while loops into the 
Potentially_Blocking category, because while loops can be used to 
implement busy spin-loops, which can be considered a form of blocking.


>
> What I had in mind are designs like:
>
> type T is record
>     M : aliased Mutex;
>     ...
> end record;
>
> A safe operation on this type looks like:
>
>     procedure Safe_Search (X : in out T; ...) is
>         Lock : Holder (T.M'Access);
>     begin
>         Unsafe_Search (X, ...);
>     end Safe_Search;
>
> Here safe operations call to unsafe ones all the time and never do each
> other because M is not reeentrant.
>

Thanks for the example. A good case to consider. By the rules I'm 
thinking of, this would not be a task-safe construct however, which I 
think is rightly so.

The Task_Safe attribute is about subprograms that can be proven to be 
safe. This construct is unsafe, because it doesn't guarantee that there 
aren't direct concurrent calls to Unsafe_Search happening while inside 
the body of Safe_Search. (It would probably be too difficult to prove, 
and so its better to assume the worst, when it comes to safety.) 
Therefore Safe_Search is also not a task-safe call.

Another rule I haven't stated is that any subroutine that modifies a 
variable (or internal state) that isn't via a protected object, atomic, 
or volatile and a type that can be atomically updated (such as Integer), 
is not Task_Safe. This would only need to be checked directly in the 
body of the task-safe subprogram, since any subprograms called by that 
subprogram also need to be Task_Safe, and would have been checked during 
their compilation.

So for example, a spinloop on a regular integer would not be considered 
Task_Safe, but a spinloop on a volatile integer would be considered task 
safe (assuming there were no other rule violations).

The rules are meant to be static checks, that are relatively easy to 
implement (I hope) and they shouldn't introduce any run-time overhead. 
They would only generate a compiler warning or suppressable error. (i.e 
No runtime exception) So such a construct as you have above wouldn't be 
disallowed. It'd only be that in a mode of stricter checking, the 
programmer would need to suppress the warning or error and indicate that 
the usage is OK.

  reply	other threads:[~2014-05-13  4:50 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-02  8:42 Safety of unprotected concurrent operations on constant objects Natasha Kerensikova
2014-05-03 13:43 ` sbelmont700
2014-05-03 20:54   ` Natasha Kerensikova
2014-05-03 21:40     ` Simon Wright
2014-05-04  0:28       ` Jeffrey Carter
2014-05-04  7:46         ` Natasha Kerensikova
2014-05-04  8:06           ` Dmitry A. Kazakov
2014-05-04 15:18           ` sbelmont700
2014-05-04 15:57             ` Natasha Kerensikova
2014-05-04 18:30               ` sbelmont700
2014-05-04 19:34                 ` Dmitry A. Kazakov
2014-05-05 19:04               ` Brad Moore
2014-05-05 21:23                 ` Brad Moore
2014-05-04 21:44                   ` Shark8
2014-05-05  8:39                     ` Simon Wright
2014-05-05 15:11                       ` Brad Moore
2014-05-05 16:36                         ` Dmitry A. Kazakov
2014-05-06  6:00                           ` Brad Moore
2014-05-06  8:11                             ` Dmitry A. Kazakov
2014-05-06  8:48                               ` Alejandro R. Mosteo
2014-05-06  9:49                                 ` G.B.
2014-05-06 12:19                                   ` Dmitry A. Kazakov
2014-05-06 12:58                                     ` G.B.
2014-05-06 15:00                                       ` Dmitry A. Kazakov
2014-05-06 16:24                                         ` G.B.
2014-05-06 19:14                                           ` Dmitry A. Kazakov
2014-05-07  6:49                                             ` Georg Bauhaus
2014-05-07  7:40                                               ` Dmitry A. Kazakov
2014-05-07 11:25                                                 ` G.B.
2014-05-07 12:14                                                   ` Dmitry A. Kazakov
2014-05-07 13:45                                                     ` G.B.
2014-05-07 14:08                                                       ` Dmitry A. Kazakov
2014-05-07 17:45                                                   ` Simon Wright
2014-05-07 18:28                                                     ` Georg Bauhaus
2014-05-07  4:59                                         ` J-P. Rosen
2014-05-07  7:30                                           ` Dmitry A. Kazakov
2014-05-07  8:26                                             ` J-P. Rosen
2014-05-07  9:09                                               ` Dmitry A. Kazakov
2014-05-07 11:29                                                 ` J-P. Rosen
2014-05-07 12:36                                                   ` Safety of unprotected concurrent operations on constant objects (was: Safety of unprotected concurrent operations on constant objects) Dmitry A. Kazakov
2014-05-07 14:04                               ` Safety of unprotected concurrent operations on constant objects G.B.
2014-05-08  4:12                               ` Brad Moore
2014-05-08  8:20                                 ` Dmitry A. Kazakov
2014-05-08 10:30                                   ` G.B.
2014-05-09 13:14                                   ` Brad Moore
2014-05-09 19:00                                     ` Dmitry A. Kazakov
2014-05-10 12:30                                       ` Brad Moore
2014-05-10 20:27                                         ` Dmitry A. Kazakov
2014-05-11  6:56                                           ` Brad Moore
2014-05-11 18:01                                           ` Brad Moore
2014-05-12  8:13                                             ` Dmitry A. Kazakov
2014-05-13  4:50                                               ` Brad Moore [this message]
2014-05-13  8:56                                                 ` Dmitry A. Kazakov
2014-05-13 15:01                                                   ` Brad Moore
2014-05-13 15:38                                                     ` Brad Moore
2014-05-13 16:46                                                       ` Simon Wright
2014-05-13 19:15                                                         ` Dmitry A. Kazakov
2014-05-13 16:08                                                     ` Dmitry A. Kazakov
2014-05-13 20:27                                                       ` Randy Brukardt
2014-05-14  4:30                                                         ` Shark8
2014-05-14 21:37                                                           ` Randy Brukardt
2014-05-14 21:56                                                             ` Robert A Duff
2014-05-15  1:21                                                               ` Shark8
2014-05-14 14:30                                                         ` Brad Moore
2014-05-15  8:03                                                         ` Dmitry A. Kazakov
2014-05-15 13:21                                                           ` Robert A Duff
2014-05-15 14:27                                                             ` Dmitry A. Kazakov
2014-05-15 15:53                                                               ` Robert A Duff
2014-05-15 16:30                                                                 ` Dmitry A. Kazakov
2014-10-26 17:11                                                                   ` Jacob Sparre Andersen
2014-05-08 19:52                                 ` Randy Brukardt
2014-05-06 16:22                             ` Robert A Duff
2014-05-06 19:07                               ` Dmitry A. Kazakov
2014-05-08  5:03                                 ` Brad Moore
2014-05-08 12:03                                   ` Brad Moore
2014-05-08 19:57                                     ` Randy Brukardt
2014-05-09  2:58                                       ` Brad Moore
2014-05-05 20:29                         ` Natasha Kerensikova
2014-05-08  3:41                           ` Randy Brukardt
2014-05-08  9:07                             ` Natasha Kerensikova
2014-05-08 19:35                               ` Randy Brukardt
2014-05-08  3:12                       ` Randy Brukardt
2014-05-05 22:30                     ` Brad Moore
2014-05-04 16:04             ` Peter Chapin
2014-05-04 18:07               ` Natasha Kerensikova
2014-05-04 18:55           ` Jeffrey Carter
2014-05-04 19:36             ` Simon Wright
2014-05-04 20:29               ` Jeffrey Carter
2014-05-05 22:46             ` Brad Moore
2014-05-04 20:25           ` Shark8
2014-05-04 23:33             ` sbelmont700
2014-05-05  7:38             ` Dmitry A. Kazakov
2014-05-08  3:45               ` Randy Brukardt
2014-05-08  3:19 ` Randy Brukardt
replies disabled

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