@Vijayant Dhankhar, thanks. 

How do you know it, I mean:
* that there is a happens-before between writes ()
* c.values is ensured to see two writes?

poniedziałek, 12 września 2022 o 21:26:01 UTC+2 Vijayant Dhankhar 
napisał(a):

> For your original formulation for the problem.. 
>
> > Is it guaranteed by JMM that any thread (T1 or T2) prints true, true?
> > To put it in another way, is it guaranteed that T1 or T2 observes 
> both c.put?
>
> Yes, one of the thread will print true, true as there is a happens-before 
> between the two writes to concurrent hash map (even if they are possibly on 
> the keys that map to different bins)
>
> On Monday, September 12, 2022 at 2:46:38 PM UTC-4 [email protected] wrote:
>
>> > I think the issue here is more the ConcurrentHashMap that doesn't 
>> promise you'll get both entries when calling c.values() in either one of 
>> the threads.
>>
>> What do you mean?
>>
>> poniedziałek, 12 września 2022 o 17:44:31 UTC+2 [email protected] 
>> napisał(a):
>>
>>> I think the issue here is more the ConcurrentHashMap that doesn't 
>>> promise you'll get both entries when calling c.values() in either one of 
>>> the threads.
>>>
>>> On Monday, September 12, 2022 at 7:50:56 AM UTC-7 [email protected] 
>>> wrote:
>>>
>>>> Thanks, for your response. I know that output "true" is possible. My 
>>>> question is: Is it guaranteed by JMM that one of T1, T2 will print "true, 
>>>> true"? 
>>>>
>>>> pon., 12 wrz 2022, 15:11 użytkownik Peter Veentjer <[email protected]> 
>>>> napisał:
>>>>
>>>>> I think this example is better:
>>>>>
>>>>> class Foo{
>>>>>   int x;
>>>>> }
>>>>>
>>>>> Thread1:
>>>>>    Foo foo = new Foo();
>>>>>    foo.x = 10;                                           (1)
>>>>>    concurrentMap.put("1", foo);             (2)
>>>>>
>>>>> Thread2:
>>>>>     Foo foo = concurrentMap.get("1");   (3)
>>>>>     if(foo!=null) print(foo.x);                   (4)
>>>>>
>>>>> There is a happens-before edge between (1) and (2) due to 
>>>>> program-order rule. And also between (3) and (4) there is a 
>>>>> happens-before 
>>>>> edge due to program-order rule.
>>>>>
>>>>> And if thread2 sees the non null value, then there is a happens-before 
>>>>> edge between (2) and (3) due to either the volatile variable rule or 
>>>>> monitor lock rule (often this is called memory consistency effects on 
>>>>> e.g. 
>>>>> queues)
>>>>>
>>>>> Since the happens-before relation is transitive, there is a 
>>>>> happens-before edge between (1) and (4).
>>>>>
>>>>> On Mon, Sep 12, 2022 at 4:02 PM Alper Tekinalp <[email protected]> 
>>>>> wrote:
>>>>>
>>>>>> From util.concurrent:
>>>>>>
>>>>>> > Actions in a thread prior to placing an object into any concurrent 
>>>>>> collection happen-before actions subsequent to the access or removal of 
>>>>>> that element from the collection in another thread.
>>>>>>
>>>>>> So ether one of threads will print (true, true) I guess.
>>>>>>
>>>>>> On Mon, Sep 12, 2022, 3:42 PM Peter Veentjer <[email protected]> 
>>>>>> wrote:
>>>>>>
>>>>>>> If T1 would run first, the content of the ConcurrentHashMap is 
>>>>>>> (1,true), and therefore there is only 1 value. 
>>>>>>>
>>>>>>> So it will print 'true' and not 'true,true' because T2 has not run 
>>>>>>> yet.
>>>>>>>
>>>>>>> On Mon, Sep 12, 2022 at 3:31 PM r r <[email protected]> wrote:
>>>>>>>
>>>>>>>> Hello,
>>>>>>>> let's look for the following piece of code:
>>>>>>>>
>>>>>>>> c = new ConcurrentHashMap<Integer, Boolean>();
>>>>>>>> T1:  
>>>>>>>>     c.put(1, true);
>>>>>>>>     for (Boolean b : c.values()) {
>>>>>>>>         print(b);
>>>>>>>>     }
>>>>>>>> T2:  
>>>>>>>>     c.put(2, true);
>>>>>>>>     for (Boolean b : c.values()) {
>>>>>>>>         print(b);
>>>>>>>>     }
>>>>>>>>
>>>>>>>> Is it guaranteed by JMM that any thread (T1 or T2) prints true, 
>>>>>>>> true?
>>>>>>>> To put it in another way, is it guaranteed that T1 or T2 observes 
>>>>>>>> both c.put?
>>>>>>>>
>>>>>>>> If yes / no, why?
>>>>>>>> Thanks in advance for your time.
>>>>>>>>
>>>>>>>> -- 
>>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>>> Groups "mechanical-sympathy" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>>> send an email to [email protected].
>>>>>>>> To view this discussion on the web, visit 
>>>>>>>> https://groups.google.com/d/msgid/mechanical-sympathy/0945e8e3-1070-4166-b269-1c4e6c49da3en%40googlegroups.com
>>>>>>>>  
>>>>>>>> <https://groups.google.com/d/msgid/mechanical-sympathy/0945e8e3-1070-4166-b269-1c4e6c49da3en%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>> -- 
>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>> Groups "mechanical-sympathy" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>> send an email to [email protected].
>>>>>>> To view this discussion on the web, visit 
>>>>>>> https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdAzirHPwyj%2B55%3D%2BSvkcLbKg80wzgspu8CDOGHOMD0Zchg%40mail.gmail.com
>>>>>>>  
>>>>>>> <https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdAzirHPwyj%2B55%3D%2BSvkcLbKg80wzgspu8CDOGHOMD0Zchg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "mechanical-sympathy" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to [email protected].
>>>>>> To view this discussion on the web, visit 
>>>>>> https://groups.google.com/d/msgid/mechanical-sympathy/CABKpSe5Z5ns%2BJ0O8cd-z0%2B%3DSgj75gr65LXbSur6W3BaELebN-A%40mail.gmail.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/mechanical-sympathy/CABKpSe5Z5ns%2BJ0O8cd-z0%2B%3DSgj75gr65LXbSur6W3BaELebN-A%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "mechanical-sympathy" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to [email protected].
>>>>>
>>>> To view this discussion on the web, visit 
>>>>> https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdCPKSx5c0wj2mdXkg%3DHm1b4H65ZTx1K_vJ7d9P4KC2q4w%40mail.gmail.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/mechanical-sympathy/CAGuAWdCPKSx5c0wj2mdXkg%3DHm1b4H65ZTx1K_vJ7d9P4KC2q4w%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/mechanical-sympathy/b3c176a2-db09-497f-80fa-54916e6f754cn%40googlegroups.com.

Reply via email to