Hi, Lex
Thank you for responding me second time.  I am touched. Sorry i forgot one
line.
They are not shared by each thread.
There is a
gh=pdt_a[i].gh;
in the second parallel for.
Therefore they are seperated. But  only add with g hash table it will stop
there. If i comment the g hash table code in second loop, it will not stop.
I think it should be some problem with glib.
Qingpeng Niu
On Tue, Sep 21, 2010 at 6:45 PM, Lex Trotman <[email protected]> wrote:

> On 22 September 2010 02:31, Qingpeng Niu <[email protected]> wrote:
> > Hi,
> >
> > I do a parallel open mp for which used shared data of g_hash_table.
> Program
> > do fine with the first parallel for loop but the third parallel for loop
> > program will stop there and never be entered.
> > g_thread_init(NULL);
> > ..............
> > #pragma omp parallel for private(i) shared(pdt_a)
> >         for(i=0;i<psize;i++)
> >          {
> >                .............
> >                 pdt_a[i].gh   = g_hash_table_new(g_str_hash,
> > compare_strings);
> >                ............
> >          }
> > #pragma omp parallel for private(i)
> shared(pdt_a,pit_a,lines,psize,nbuckets)
> >         for(i=0;i<psize;i++)
> >         {
> >                for....
> >                    lookup = g_hash_table_lookup(gh, input);
> >               .....................
> >                     g_hash_table_insert(gh, data, p_data);
> >               .....................
> >                       g_hash_table_replace(gh,strdup(input),p_data);
> >         }
> >
>
> It is not clear from this code if the hash tables are shared between
> threads or if each thread has its own.
>
> If they are shared then you need to do the locking, from Gthread
> documentation : "After calling g_thread_init(), GLib is completely
> thread safe (all global data is automatically locked), but individual
> data structure instances are not automatically locked for performance
> reasons. So, for example you must coordinate accesses to the same
> GHashTable from multiple threads."
>
> If they are not shared then this is a question for the openmp ML not
> the glib ML.
>
> Cheers
> Lex
>
>
> > #pragma omp parallel for private(i)   // this parallel for will not be
> > entered. Program will stop here and halt.
> >         for(i=0;i<psize;i++)
> > --
> > Qingpeng Niu
> > Department of Computer Science and Engineering at OSU
> >
> > _______________________________________________
> > gtk-list mailing list
> > [email protected]
> > http://mail.gnome.org/mailman/listinfo/gtk-list
> >
> >
> _______________________________________________
> gtk-list mailing list
> [email protected]
> http://mail.gnome.org/mailman/listinfo/gtk-list
>



-- 
Qingpeng Niu
Department of Computer Science and Engineering at OSU
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to