TCL handles concurrency for memory allocation bits. Looking at it more, the
hashtable part of the library doesn’t support currency and you would have to
handle locking yourself.
I created a test program to see when it was locking:
#include "ink_hash_table.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
int main() {
const char *foo = "hello_world";
InkHashTable *mine(ink_hash_table_create(InkHashTableKeyType_String));
ink_hash_table_insert(mine, "foo", (void*)foo);
char *foo_check = nullptr;
ink_hash_table_lookup(mine, "foo", (void**)&foo_check);
cout << foo_check << endl;
}
Breakpoint 3, 0x00007ffff5ea4da0 in pthread_mutex_lock () from
/lib64/libpthread.so.0
(gdb) bt
#0 0x00007ffff5ea4da0 in pthread_mutex_lock () from /lib64/libpthread.so.0
#1 0x00007ffff65fe927 in ?? () from /lib64/libtcl8.6.so
#2 0x00007ffff65fed6d in TclpAlloc () from /lib64/libtcl8.6.so
#3 0x00007ffff65213c8 in Tcl_Alloc () from /lib64/libtcl8.6.so
#4 0x00007ffff65b6315 in ?? () from /lib64/libtcl8.6.so
#5 0x00007ffff65b64c7 in ?? () from /lib64/libtcl8.6.so
#6 0x00007ffff7bafe67 in ink_hash_table_get_entry (ht_ptr=<optimized out>,
key=<optimized out>, new_value=<optimized out>) at ink_hash_table.cc:244
#7 0x00007ffff7bafeb6 in ink_hash_table_insert (ht_ptr=ht_ptr@entry=0x614010,
key=key@entry=0x400b3c "foo", value=value@entry=0x400b30) at
ink_hash_table.cc:293
#8 0x0000000000400951 in main () at test_ink_hash_table.cc:10
(gdb) cont
-Bryan
> On Sep 29, 2017, at 1:50 PM, CrazyCow <[email protected]> wrote:
>
> I read the code of Tcl_HashTable. They say nothing about handling concurrency.
>
> The biggest concern about this is, as Alan and Bryan said, what level of use
> will we have for ATS.
> I read docs <https://www.threadingbuildingblocks.org/docs/help/index.htm> of
> TBB. It's offering rich tools of handling threading issues. We can look into
> it more to see if there are other utilities appealing.
> Generally speaking, nice docs, good reputation, and upcoming new releases are
> signs of tbb being a good choice.
>
> 2017-09-29 12:11 GMT-07:00 Bryan Call <[email protected]
> <mailto:[email protected]>>:
> This seems like a large dependency to pull in to get a thread safe unordered
> map. We already have a dependency on Tcl_HashTable (InkHashTable), that
> handles concurrency, and it used throughout the code base.
>
> -Bryan
>
>
>
>> On Sep 28, 2017, at 5:55 PM, CrazyCow <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> Hi, ATS devs,
>>
>> Currently, we have a requirement of concurrent_unordered_map (details can be
>> found https://github.com/apache/trafficserver/pull/2555
>> <https://github.com/apache/trafficserver/pull/2555>). And
>> intel::tbb::concurrent_unordered_map is the most mature one we can try out.
>> I understand this dependency is huge. I'd like to hear opinions from you
>> guys, that whether we need to do it or not and if yes, what is the best
>> approach to introduce it.
>>
>>
>> Thanks,
>> Zizhong
>
>