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 <zhangzizhong0...@gmail.com> 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 <bc...@apache.org 
> <mailto:bc...@apache.org>>:
> 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 <zhangzizhong0...@gmail.com 
>> <mailto:zhangzizhong0...@gmail.com>> 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
> 
> 

Reply via email to