如何正确删除另一个线程中的对象

时间:2018-01-19 09:50:21

标签: multithreading haxe

昨天我们的队友创建了代码,他将query.destroy()移到了单独的线程中。他这样做是为了让代码更快。

    private queryBag : IQueryBag
    ... ... ...
    private function destroyQueryBag() : Void
    {
        CoreThread.transferToCoreThread(function()
        {
            if (queryBag != null)
            {
                queryBag.destroy();
                queryBag = null;
            }
        });
    }

    private function resetRequestsAndResponses() : Void
    {
        destroyQueryBag();
        queryBag = null;
        queryBag = createNewQueryBag();
    }

但我发现这个代码给Ricky。如果新线程在创建NewQueryBag后太晚调用它们的代码怎么办?在这种情况下,queryBag仍然为null。我认为新线程应该使用另一个引用,正确的代码应该像下一个:

    private var queryBag : IQueryBag
    ... ... ...
    private function destroyQueryBag() : Void
    {
        private var tempQueryBag = queryBag; // another reference !!!
        queryBag = null;
        CoreThread.transferToCoreThread(function()
        {
            if (tempQueryBag != null)
            {
                tempQueryBag.destroy();
                tempQueryBag = null;
            }
        });
    }

    private function resetRequestsAndResponses() : Void
    {
        destroyQueryBag();
        queryBag = createNewQueryBag();
    }

我在多线程方面经验不足。请问确认我的假设吗?

0 个答案:

没有答案