问题标签 [nslock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2175 浏览

iphone - NSLock 实例应该是“全局的”吗?

NSLock我应该在应用程序委托中创建一个实例,供所有类使用吗?还是建议让每个类NSLock根据需要实例化自己的实例?

例如,如果我可以访问分布在两个视图控制器中的托管对象上下文,那么锁定在第二种情况下是否有效?

0 投票
3 回答
5174 浏览

iphone - Objective-C 2.0 中的多线程问题

我有我的主应用程序委托,其中包含一个返回对象的方法。此应用程序委托在主线程上运行。

我还有一个在不同线程上运行的 NSOperation。除了希望有时能够在我的主线程上调用我的应用程序委托方法外,我还需要从我的 NSOperation 线程中调用它以获取它返回的对象。我的第一个问题是,如果我从我的另一个线程中调用它......

...该方法将在与 NSOperation 相同的线程上处理,还是与应用程序委托所在的线程(主)相同?

我还想确保myMethod我的操作线程或主线程一次只调用一次其中的代码。我可以在我的应用程序委托中创建一个 NSLock 实例变量并执行以下操作:

谢谢你的帮助!

麦克风

0 投票
1 回答
2968 浏览

iphone - 如何在 _NSLockError() 上设置断点

我正在尝试调试多个线程。

我该如何调试呢?

0 投票
3 回答
5705 浏览

iphone - 使用 [ALAssetsLibrary enumerateGroupsWithTypes:] 时的 Cocoa 线程同步

我最近和一些人一样,发现[ALAssetsLibrary enumerateGroupsWithTypes]喜欢在另一个线程上运行它的块。苹果没有记录这一点真是太可惜了:-)

在我目前的情况下,我需要等待枚举完成,然后主线程返回任何结果。我显然需要某种线程同步。

我已经阅读了有关 NSLock 和 NSConditionLock 的信息,但似乎还没有任何内容符合“指示此工作线程已完成的阻塞线程”的要求。这似乎是一个足够简单的需求——谁能指出我正确的方向?

您的线索和嘘声,一如既往地受到欢迎,

M。

0 投票
2 回答
5463 浏览

cocoa - NSLock - 锁定锁定锁时应该阻塞吗?

我有一个以 a 开头的循环

因为在循环体中,我正在创建另一个线程,该线程需要在循环再次运行之前完成。(完成后另一个线程将解锁它)。

但是在第二个循环中,我收到以下错误:

“锁定”文档说明以下内容:

摘要:尝试获取锁,阻塞线程的执行,直到可以获取锁为止。(必需的)

这让我认为它只会阻塞直到可以获取锁?

0 投票
1 回答
2520 浏览

multithreading - 锁定和解锁 Cocoa 中不同线程的信号量

我需要使用某种信号量来保护对互斥体区域的访问,但我需要这个区域跨越多个线程。这是我在文档中找到的:

警告: NSLock 类使用 POSIX 线程来实现其锁定行为。向 NSLock 对象发送解锁消息时,您必须确保该消息是从发送初始锁定消息的同一线程发送的。从不同的线程解锁锁可能会导致未定义的行为。

我记得我读到过这是一种防止编程错误的方法。这个说法正确吗?我从文档中阅读了线程指南,但我找不到任何其他允许从不同线程锁定和解锁的类。Cocoa 中还有其他解决方案可以做到这一点吗?谢谢!

0 投票
1 回答
2475 浏览

objective-c - 等待锁定的 NSLock 直到 tryLock 成功

我有一个有 2 个方法的类,第一个制作动画一秒钟,第二个执行一些任务。

此类从第二个类调用以连续执行这两个操作,但我想强制执行锁定,以便第二个操作仅在第一个操作完成时运行。

我的问题是,最好的方法是什么。

这是我的代码:

以及调用它的代码:

0 投票
5 回答
6059 浏览

iphone - ALAssetsLibrary enumerateGroupsWithTypes: - 线程同步

我正在使用 [ALAssetsLibrary enumerateGroupsWithTypes:] 将 ALAssets 存储在一个数组中。由于这是一个异步操作,我需要等待它完成才能继续我的工作。

我在使用 [ALAssetsLibrary enumerateGroupsWithTypes:] 时阅读了Cocoa 线程同步,并尝试了推荐的 NSConditionLock。但是,块总是在主线程中执行,因此如果我使用条件锁等待,主线程被阻塞并且块不会被执行 -> 我被卡住了。我什至尝试在新线程上运行方法 loadAssets,但块仍然在主线程上执行。

我找不到真正等待枚举完成的方法。有没有办法将块强制到与主线程不同的线程或我能做的任何其他事情?

这是代码:

0 投票
1 回答
161 浏览

iphone - iOS - 尝试设置锁字典

我有一些将 NSString 作为输入并使用该字符串创建对象的代码。我需要确保它不会对同一个字符串进行两次操作,例如,如果从不同的线程调用,或者即使同一个线程尝试递归地执行它。

我可以先创建一个初始化对象的字典,然后在再次传递相同的字符串时抓取该对象。但这仍然留下了当对象被第二次请求而其他代码正在初始化它时会发生什么的问题。

我看到 Apple 为我提供了 NSLock 类。我不知道如何将它应用于我的问题。我看到 Apple 允许我为我的锁命名,但我看不到任何方法可以使用给定名称访问锁。我想我可以制作一个锁字典,但即使这样似乎也不是万无一失的——如果两个线程同时尝试制作同名的锁怎么办?

谁能在这里指出我正确的方向?

0 投票
2 回答
727 浏览

objective-c - NSLock“控制器”类

我正在为 iPhone 编写一个多线程应用程序,并且我正在使用 NSLock 来确保某些操作(例如从文件中加载声音)将表现为原子操作。为了简化从我的应用程序的不同部分获取锁,我编写了以下类,它允许我通过传递带有名称的 NSString 来锁定和解锁锁。如果这样的锁不存在,它会创建它并保存以备将来使用。我对其进行了测试,它似乎工作正常(因为它只提供对 NSLock 对象的访问并且不会改变它们的行为)。

我的问题是:拥有和使用这样的类是否可以,还是我对锁的概念有一些误解?