Hi!
__thread turned out to be much faster under benchmarking then boost's
thread_specific_ptr (and both gcc and Sun Studio support it). The only platform
that we have that doesn't is OSX and there emulating the behavior with the
boost::thread:: scoped lock was just as simple. If you take a look at how boost
implements its thread specific you can get a feel for why this is the case.
Cheers,
-Brian
On Jun 8, 2010, at 5:49 AM, Jay Pipes wrote:
> Hi Brian,
>
> I have a suggestion for this code. I am wondering why you have used a
> #define on _HAVE_GLIBCXX_TLS? You have already included
> boost::thread, so why not use Boost thread-local storage and remove
> the need for #define's using the following code:
>
> // in /drizzled/table_identifier.cc
> #include <boost/thread/thread.hpp>
> #include <boost/thread/tss.hpp>
>
> using namespace boost;
>
> namespace drizzled
> {
> thread_specific_ptr<uint32_t> tmp_table_counter;
>
> // then, in the build_tmptable_filename() function, you can do:
>
> uint32_t *counter_value= tmp_table_counter.get();
> if (counter_value == NULL)
> {
> tmp_table_counter.reset(new int(0));
> *counter_value= tmp_table_counter.get();
> }
> else
> {
> ++(*counter_value);
> }
> post_tmpdir_str << pthread_self() << *counter_value;
>
> }
>
> -jay
>
> On Tue, Jun 8, 2010 at 1:48 AM, <[email protected]> wrote:
>> ------------------------------------------------------------
>> revno: 1602
>> committer: Brian Aker <br...@gaz>
>> branch nick: rollup
>> timestamp: Mon 2010-06-07 17:40:06 -0700
>> message:
>> Update for current_session removal.
>> modified:
>> drizzled/table_identifier.cc
>>
>>
>> --
>> lp:drizzle
>> https://code.launchpad.net/~drizzle-developers/drizzle/development
>>
>> You are subscribed to branch lp:drizzle.
>> To unsubscribe from this branch go to
>> https://code.launchpad.net/~drizzle-developers/drizzle/development/+edit-subscription
>>
>> === modified file 'drizzled/table_identifier.cc'
>> --- drizzled/table_identifier.cc 2010-06-07 16:59:18 +0000
>> +++ drizzled/table_identifier.cc 2010-06-08 00:40:06 +0000
>> @@ -24,7 +24,6 @@
>>
>> #include "drizzled/table_identifier.h"
>> #include "drizzled/session.h"
>> -#include "drizzled/current_session.h"
>> #include "drizzled/internal/my_sys.h"
>> #include "drizzled/data_home.h"
>>
>> @@ -34,6 +33,8 @@
>> #include <sstream>
>> #include <cstdio>
>>
>> +#include <boost/thread.hpp>
>> +
>> using namespace std;
>>
>> namespace drizzled
>> @@ -114,18 +115,39 @@
>> path length on success, 0 on failure
>> */
>>
>> +#ifdef _GLIBCXX_HAVE_TLS
>> +__thread uint32_t counter= 0;
>> +
>> +static uint32_t get_counter()
>> +{
>> + return ++counter;
>> +}
>> +
>> +#else
>> +boost::mutex counter_mutex;
>> +static uint32_t counter= 1;
>> +
>> +static uint32_t get_counter()
>> +{
>> + boost::mutex::scoped_lock lock(counter_mutex);
>> + uint32_t x;
>> + x= ++counter;
>> +
>> + return x;
>> +}
>> +
>> +#endif
>> +
>> static size_t build_tmptable_filename(std::string &buffer)
>> {
>> size_t tmpdir_length;
>> ostringstream post_tmpdir_str;
>>
>> - Session *session= current_session;
>> -
>> buffer.append(drizzle_tmpdir);
>> tmpdir_length= buffer.length();
>>
>> post_tmpdir_str << "/" << TMP_FILE_PREFIX << current_pid;
>> - post_tmpdir_str << session->thread_id << session->tmp_table++;
>> + post_tmpdir_str << pthread_self() << get_counter();
>>
>> buffer.append(post_tmpdir_str.str());
>>
>>
>>
>>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~drizzle-discuss
> Post to : [email protected]
> Unsubscribe : https://launchpad.net/~drizzle-discuss
> More help : https://help.launchpad.net/ListHelp
_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help : https://help.launchpad.net/ListHelp