Re: synchronization between two process without lock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2017-08-05 3:50 GMT+08:00 Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>:
> On Fri, Aug 04, 2017 at 11:57:28PM +0800, Yubin Ruan wrote:
>> 2017-08-04 22:52 GMT+08:00 Yubin Ruan <ablacktshirt@xxxxxxxxx>:
>> > Hi,
>> > I am sure the subject explain my intention. I got two processes trying
>> > to modifying the same place. I want them to do it one after one, or,
>> > if their operations interleave, I would like to let them know that the
>> > content have been changed and polluted by the other so that the
>> > content should be given up. That is, I would rather give up the data,
>> > if polluted, than having a false one.
>> >
>> > I try to set a atomic ref counter, but it seems impossible to do that
>> > without a lock to synchronize.
>> >
>> > Note that I don't want a strict synchronization: the situation is a
>> > lot better. The data can be given up if that place has been polluted.
>>
>> Let's explain some of my reasoning: if process A use some flag to
>> indicate that it has entered the critical region, then if it crash
>> before it can reset the flag, all following processes cannot enter
>> that region. But if process A cannot use flag for indication, how to
>> other people know (how to synchronization)?
>
> The simplest approach is to guard the data with a lock.

Indeed. But if a process get killed then it will have no chance to release
the lock...

By the way, do you know whether there are any chances that a thread get
killed by another thread when doing some "small" things? I mean something
like this:

    lock();
    some_mem_copying();
    unlock();

Are there any chance that a thread get killed by another thread before it
can "unlock()", without the entire process going down?

> But if you don't want to do that, another approach is to restrict the
> data to one machine word minus one bit, with zero saying that the location
> is (as you say) unpolluted.  Then you can use a compare-and-swap loop
> to update the location only if it is unpolluted.
>
> But maybe you need more data.  If so, you can have the data separately
> (perhaps dynamically allocated, perhaps not, your choice), and then use
> the compare-and-swap method above where NULL says unpolluted.

Good suggestion... although I think it would be pretty painful.

Thanks,
Yubin
--
To unsubscribe from this list: send the line "unsubscribe perfbook" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux