Hi Benjamin and folks:

Thanks for the response. I made the change to ll_new_start_thread. Still I get 
the Ambiguous low-level helper specialization error.


The programme is small. Here is the programme in its entirety. Hopefully it is 
a silly error. Any help would be appreciated.

Cheers,
Andrew

-------

import time
from pypy.module.thread import ll_thread
from pypy.translator.stm import rstm

NUM_THREADS = 2

class Account(object):
    def __init__(self, value):
        self.value = value

class Done(object):
    def __init__(self):
        self.done = 0

fromAccount = Account(1000)
toAccount = Account(2000)
counter = Done()


def transactionA(source, target, done):
    print "transaction A starting"
    source.value -= 50
    target.value += 50
    rstm.transaction_boundary()
    print "Source account %d  TargetAccount %d" % (source.value,target.value)
    print "transaction A done"
    done.done += 1 


def transactionB(source, target, done):
    print "transaction B starting"
    t = source.value * .1
    source.value -= t
    target.value += t
    rstm.transaction_boundary()
    print "Source account %d  Target %d" % (source.value, target.value)
    print "transaction A done"
    done.done += 1


def T1():
    #global fromAccount, toAccount, counter
    transactionA(fromAccount, toAccount, counter)


def T2():
    #global fromAccount, toAccount, counter
    transactionB(fromAccount, toAccount, counter)

# __________  Entry point  __________

def entry_point(argv):
    ll_thread.start_new_thread(T1,())
    ll_thread.start_new_thread(T2,())
    #ll_thread.ll_start_new_thread(T1)
    #ll_thread.ll_start_new_thread(T2)
    print "sleeping..."
    while counter.done < NUM_THREADS:   
        time.sleep(1)
    print "done sleeping."

    # easy way to know if transactions are being serialized correctly
    assert fromAccount.value + toAccount.value == 3000 
    return 0

# _____ Define and setup target ___

def target(*args):
    return entry_point, None













































































































































































































































































































































































































































































































def T2():
    global fromAccount, toAccount, counter
    transactionB(fromAccount, toAccount, counter)

# __________  Entry point  __________

def entry_point(argv):
    global fromAccount, toAccount, counter
    #ll_thread.start_new_thread(T1,())
    #ll_thread.start_new_thread(T1,())
    ll_thread.ll_start_new_thread(T1)
    ll_thread.ll_start_new_thread(T2)
    print "sleeping..."
    while counter.done < NUM_THREADS:
        time.sleep(1)
    print "done sleeping."
    assert fromAccount.value + toAccount.value == 3000
    return 0

# _____ Define and setup target ___

def target(*args):
    return entry_point, None







________________________________
 From: Benjamin Peterson <[email protected]>
To: Andrew Francis <[email protected]> 
Cc: "[email protected]" <[email protected]> 
Sent: Monday, January 23, 2012 5:23 PM
Subject: Re: [pypy-dev] What Causes An Ambiguous low-level helper 
specialization Error?
 
2012/1/23 Andrew Francis <[email protected]>:
>     ll_thread.start_new_thread(T1)
>     ll_thread.start_new_thread(T2)

Try this:
     ll_thread.ll_start_new_thread(T1)
     ll_thread.ll_start_new_thread(T2)




-- 
Regards,
Benjamin
_______________________________________________
pypy-dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to